728x90
반응형
SMALL
자바스크립트 코드 실행
1. 스크롤 이동
# 브라우저 스크롤 최하단으로 이동
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
# CSS 셀렉터로 클릭
driver.execute_script("document.querySelector('body > div.modal-options__buttons > button.btn.btn-primary').click();")
# 또는
elemToclick = driver.~~~
driver.execute_script('arguments[0].click();', elemToclick)
# driver.find_element_by_css_selector(~~).click()과 동일하나 이 코드가 작동하지 않을시 자바스크립트 코드를 시도한다.
# 스크롤 특정 엘리먼트로 이동
element = driver.find_element_by_css_selector('div > a')
driver.execute_script('arguments[0].scrollIntoView(true);', element)
2. 새 탭 열기
driver.execute_script('window.open("https://naver.com");')
스크린샷
# 캡쳐할 엘레먼트 지정
element = driver.driver.find_element_by_class_name('ico.search_submit')
# 캡쳐
element.save_screenshot('image.png')
예외처리 (Exceptions)
from selenium.common.exceptions import NoAlertPresentException, NoSuchElementException, TimeoutException, ElementNotInteractableException,NoSuchWindowException, NoSuchFrameException
# NoAlertPresentException 경고창 관련 명령어를 실행했으나 현재 경고창이 뜨지 않음
# NoSuchElementException 엘레먼트 접근하였으나 없음
# TimeoutException 특정한 액션을 실행하였으나 시간이 오래 지나도록 소식이 없음
# ElementNotInteractableException 엘리먼트에 클릭등을 하였으나 클릭할 성질의 엘리먼트가 아님
# NoSuchWindowException 해당 윈도우 없음
# NoSuchFrameException 해당 프레임 없음
shadow DOM 처리
# shadow dom 엘레먼트 열어주는법
element = driver.execute_script("return document.querySelector('#syndi_powerpage > div').shadowRoot").get_attribute('innerHTML') # css Selector 이용 # element 의 HTML 내용 return
# shadow dom 처리를 통한 크롬 인터넷 기록 삭제
def expand_shadow_element(element):
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
driver.get('chrome://settings/clearBrowserData')
elem = driver.find_element_by_css_selector('body > settings-ui')
elem1 = expand_shadow_element(elem)
elem1 = elem1.find_element_by_id('main')
elem2 = expand_shadow_element(elem1)
elem2 = elem2.find_element_by_tag_name('settings-basic-page')
elem3 = expand_shadow_element(elem2)
elem3 = elem3.find_element_by_tag_name('settings-privacy-page')
elem4 = expand_shadow_element(elem3)
elem4 = elem4.find_element_by_tag_name('settings-clear-browsing-data-dialog')
elem5 = expand_shadow_element(elem4)
elem5forconfirmelem = expand_shadow_element(elem4) # 인터넷 사용기록 삭제버튼 클릭을 위한 엘레먼트 따로 빼놓기
elem5 = elem5.find_element_by_id('clearFromBasic')
elem6 = expand_shadow_element(elem5)
elem6 = elem6.find_element_by_id('dropdownMenu')
elem6.find_element_by_css_selector('option[value="4"]').click() # 전체기간 선택
elem5forconfirmelem.find_element_by_id('clearBrowsingDataConfirm').click() # 인터넷 사용기록 삭제버튼 클릭
ActionChains (마우스, 키보드 입력 등 연속 동작 실행)
from selenium.webdriver import ActionChains
menu = driver.find_element_by_css_selector('.nav')
hidden_submenu = driver.find_element_by_css_selector('.nav #submenu1')
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
# 같은 동작의 코드
actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()
마우스 클릭, Drag and Drop, 키보드 입력 등을 연속적으로 수행할 수 있다.
|
# Ctrl + C 동작
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
동작 수행 | 함수설명 |
click(on_element=None) | 인자로 주어진 요소를 왼쪽 클릭한다. |
click(on_element=None) | 인자로 주어진 요소를 왼쪽 클릭한다. |
click_and_hold(on_element=None) | 인자로 주어진 요소를 왼쪽 클릭하고 누르고 있는다. |
release(on_element=None) | 마우스를 주어진 요소에서 뗀다. |
context_click(on_element=None) | 인자로 주어진 요소를 오른쪽 클릭한다. |
double_click(on_element=None) | 인자로 주어진 요소를 왼쪽 더블클릭한다. |
drag_and_drop(source, target) | source 요소에서 마우스 왼쪽 클릭하여 계속 누른 채로 target까지 이동한 뒤 마우스를 놓는다. |
drag_and_drop_by_offset(source, xoffset, yoffset) | 위와 비슷하지만 offset만큼 이동하여 마우스를 놓는다. |
key_down(value, element=None) | value로 주어진 키를 누르고 떼지 않는다. |
key_up(value, element=None) | value로 주어진 키를 뗀다. |
move_to_element(to_element) | 마우스를 해당 요소의 중간 위치로 이동한다. |
move_to_element_with_offset(to_element, xoffset, yoffset) | 마우스를 해당 요소에서 offset만큼 이동한 위치로 이동한다. |
perform() | 이미 쌓여 있는 (stored) 모든 행동을 수행한다 (chaining). |
reset_actions() | 이미 쌓여 있는(stored) 모든 행동을 제거한다. |
send_keys(*keys_to_send) | 키보드 입력을 현재 focused된 요소에 보낸다. |
send_keys_to_element(element, *keys_to_send) | 키보드 입력을 주어진 요소에 보낸다. |
기타 기능
|
# Go to the correct domain
driver.get('http://www.example.com')
# Now set the cookie. This one's valid for the entire domain
cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}
driver.add_cookie(cookie)
# And now output all the available cookies for the current URL
driver.get_cookies()
https://selenium-python.readthedocs.io/index.html
728x90
반응형
LIST
'App Programming > Web Crawler' 카테고리의 다른 글
[Web Crawler] 다양한 유형의 파일로 저장하기 (csv, xls, txt) (0) | 2022.02.16 |
---|---|
[Web Crawler] 조회결과를 수집하고 txt 파일로 저장하기 (0) | 2022.02.16 |
[Web Crawler] 셀레니움 (Selenium) (3) (0) | 2022.02.15 |
[Web Crawler] 셀레니움 (Selenium) (2) (0) | 2022.02.15 |
[Web Crawler] 셀레니움 (Selenium) (1) (0) | 2022.02.15 |