개발/PYTHON

Python selenium 사용법

Aireee 2022. 3. 18. 12:27
300x250
반응형

1. 설치(일반환경일 때)

pip install selenium

 

2. 브라우저 다운로드

크롬의 경우는 실행하는 컴퓨터와 동일한 버전의 드라이버를 필요로 한다. 다른 브라우저 드라이버는 사용해본적이 없는 관계로 패스

* 크롬 : https://sites.google.com/a/chromium.org/chromedriver/downloads
* 파이어폭스 : https://github.com/mozilla/geckodriver/releases
* 엣지 : https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
* 사파리 : https://webkit.org/blog/6900/webdriver-support-in-safari-10/

 

3. 불러오기

설치한 selenium 을 사용하기 위해서는 필요한 라이브러리를 프로그램 소스 내에 불러와야 한다.

import selenium
from selenium import webdriver

여기까지가 가장 기본이 되는 불러오기라고 생각하면 된다. 셀레니움 내의 다른 모듈을 사용하는 경우 추가적인 불러오기가 필요할 수 있는데, 예를들면 다음과 같은 것들이 있다. 

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver import ActionChains

 

4. 드라이버 실행

반드시 실행해야 하는 코드다, 셀레니움은 설치한 드라이버를 스스로 열어서 웹사이트에 접속하기 때문이다. 그러므로 우선적으로 드라이버를 불러와줘야 한다.

# 드라이버가 프로그램 파일과 동일한 폴더에 위치한 경우
driver = webdriver.Chrome(executable_path ='chromedriver')

# 드라이버가 특정한 경로에 있는 경우
driver = webdriver.Chrome(경로 및 파일명)

----------------------------------------

# 브라우저 크기 설정
option = webdriver.ChromeOptions()
options.add_argument('window-size=1920,1080')
driver = webdriver.Chrome('chromedriver', options=options)

 

5. 기타 사용관련 코드

# 현재 URL 얻기
driver.current_url

# 브라우저 닫기
driver.close()

# 드라이버 종료
driver.quit()

# 로딩 대기 
driver.implicitly_wait(time_to_wait = 3) # 3초간 대기

# 웹사이트 접속
driver.get(url = '접속사이트 주소')

# 앞으로가기
driver.forward()

# 뒤로가기
driver.back()

# 브라우저 최소화
driver.minmize_window()

# 브라우저 최대화
driver.maximize_window()

# 스크릿샷 저장
driver.save_screenshot('파일명')

 

6. 위치를 찾는 방법

무언가를 하기 위해서는 하고자 하는 것의 위치를 찾아야 한다. 위치를 찾는 방법은 여러가지가 있는데, 자신에게 맞는 방법을 사용하면 된다. 

# 아이디로 찾기
element = driver.find_element_by_id('아이디이름')

# 클래스명으로 찾기
element = driver.find_element_by_class_name('클래스이름')

# CSS SELECTOR 값으로 찾기
element = driver.find_element_by_css_selector('CSS SELECTOR 값')

# html 태그로 찾기
element = driver.find_element_by_tag_name('태그명')

# xpath 값으로 찾기
element = driver.find_element_by_xpath('Xpath 값')

# link text 로 찾기
element = driver.find_element_by_link_text('link text 값')

# partial link text 로 찾기
element = driver.find_element_by_partial_link_text('link text 값')

# name 으로 찾기
elemet = driver.find_element_by_name('name 값')

위 코드에서 element 를 elements 로 변경하면 반복가능한 형태로 값을 출력한다고 하는데 사용해본적이 없어서 패스한다. 또한 위 내용 중 link text 란, <a> 태그 내의 링크를 대상으로 찾는 것이고, partial_link_text 는 일부만 포함되어 있어도 선택한다는 말이 된다. 즉 <a href='tistory.com'>티스토리</a> 라는 태그가 있을 때 link_text 는 "티스토리" 여야 선택하는 것이고 partial_link_text 는 "티스" 만 있어도 선택을 한다는 것

 

7. 선택한 element 에서 액션수행하기

# 선택된 element 에 내용을 입력한다.(파일도 같은 방식)
element.send_keys('입력내용')

# 선택된 element 를 클릭한다
element.click()

# 선택된 element 의 값을 지운다
element.clear()

 

8. 자바스크립트 코드를 실행해야 할 때

# 선택 및 실행
driver.execute_script("document.getElementsById('schbox')[0].value =\'"+value+"\'")

 

9. select 박스일 때

# 필요한 모듈을 가져온다
from selenium.webdriver.support.ui import Select

# select 박스를 선택한다.
select = Select(driver.find_element_by_id('group_name'))

# 선택된 select 박스의 option value값을 이용해 찾는다
select.select_by_value(value='그룹명')

# 선택된 select 박스의 순서값을 이용해 찾는다.
select.select_by_index(index=3)

 

10. iframe 이 있을 때

iframe 이 존재하는 경우, 우선적으로 프레임을 변경해야 한다. 

# 프레임 이동방법
driver.switch_to_frame("프레임명")

# 프레임에서 복귀하려면
driver.switch_to_default_content()

 

10 경고창

# 경고창 모듈 가져오기
from selenium.webdriver.common.alert import Alert

# 경고창으로 이동
alert = driver.switch_to.alert

# 경고창 확인
Alert(driver).accept()

# 경고창 취소
Alert(driver).dismiss()

# 경고창 내용
Alert(driver).text

 

반응형