📌 브라우저에서 해당 웹 페이지의 요소들을 로드하는 데 시간이 걸린다. 그렇기 때문에 매크로를 만들다보면 간혹 ElementNotVisibleException
에러가 발생한다.
페이지 로딩이 완료되지 않은 상태에서 find_element_by_css_selector
등으로 존재하지 않은 selector를 찾으려고 하니 이런 에러가 발생하게 된다.
보통 두가지 방법의 wait이 있다.
time.sleep
과 driver.implicitly_wait
sleep은 프로세스 자체를 지정한 시간동안 기다려 주는 역할을 한다.
time.sleep(5)
코드 실행하면 5초가 지나고 멈춘다.
중간에 해당 sleep을 중지시키는 명시적인 명령을 내리지않으면 5초간 계속 대기한다. (지정된 시간동안 무조건 지연)
implicitly_wait은 브라우저에서 사용되는 엔진 자체에서 파싱되는 시간을 기다려 주는 셀레늄에서만 사용하는 메소드이다.
driver.implicitly_wait(5)
를 실행하면 요소가 존재할 때까지 최대 5초 동안 대기한다. 2초 후에 발견되면 코드 실행은 3초 이상 기다리지 않고 계속된다.
브라우저 사이즈를 설정해서 열 수 있다.
# 원하는 가로와 세로 저정
browser.set_window_size(1920, 1280)
# 크롬 창 최대화
browser.maximize_window()
# 원하는 url 페이지
browser.get('http://www.daum.net')
# 페이지 내용
browser.page_source
# 세션
browser.session_id
# 타이틀
browser.title
# 현재 url
browser.current_url
# 현재 쿠키 정보
browser.get_cookies()
다음 페이지에 이동하여 검색창에 검색하고 난 뒤 스크린샷을 저장 한다.
스크린샷 저장 2가지 방법이 있다.
from selenium import webdriver
# webdriver 설정
browser = webdriver.Chrome('./webdriver/ex/chromedriver.exe')
# 크롬 브라우저 wait
browser.implicitly_wait(5)
# 브라우저 사이즈
browser.set_window_size(1920, 1280)
# 페이지 이동
browser.get('http://www.daum.net')
# 검색창 input 선택
element = browser.find_element_by_css_selector('div.inner_search > input.tf_keyword')
# 검색어 입력
element.send_keys('BTS')
# 검색(Form Submit)
element.submit()
# 스크린 샷 저장1
browser.save_screenshot("E:\bts_ch1.jpg")
# 스크린 샷 저장2
browser.get_screenshot_as_file('E:\bts_ch2.jpg')
# 브라우저 종료
browser.close()
browser.quit()
🧰 driver.close()로 브라우저를 종료 하지 않을 경우 스크립트 수행마다 chromedriver.exe를 계속 실행한다. 꼭 종료 해주기!!!