★ 크롬드라이버 설치가 필요
- selenium이 크롬을 직접 실행하여 사용하므로 드라이버가 필요
- https://chromedriver.storage.googleapis.com/index.html?path=2.32/에서 받을 것 (최신 버전에서 일부 웹사이트를 정상적으로 제어 안됨)
- chromedriver.exe 또는 crhomedriver를 코드와 동일한 폴더에 넣어 사용
from selenium import webdriver
driver = webdriver.Chrome('./chromedriver') : 크롬드라이버가 실행됨
driver.get('https://news.naver.com') : 해당 페이지로 이동
웹브라우져의 F12 분석툴을 이용하여,
가장 사용가능한 최소의 unique한 id > name > class 속성 (unique 여부 확인 필요) 사용하고 unique한 것이 없으면 상위의 id, name 등을 이용하여 가져온 element내에서 다시 좁혀 들어감.
elements = driver.find_element_by_id('right.ranking_contents')
childs = elements.find_elements_by_tag_name('li')
driver.quit() : python 종료전 종료를 시켜주어야 함.
import os
from selenium import webdriver
driver = webdriver.Chrome('./chromedriver')
try:
elements = driver.find_element_by_id('right.ranking_contents')
childs = elements.find_elements_by_tag_name('li')
for c in childs:
print(c.text)
except Exception as e:
print(e)
finally:
driver.quit()
|
입력하기
elem = driver.find_element_by_id('query')
elem.send_keys(keyword)
elem.sendkeys(Keys.RETURN)
from selenium import webdriver
driver = webdriver.Chrome('./chromedriver')
try:
k = input('Enter keywords : ')
e = driver.find_element_by_id('query')
e.send_keys(k)
e.send_keys(Keys.RETURN)
except Exception as er:
print('Error occurs !!! : %s' % er)
finally:
input('enter to quit')
driver.quit()
|
이전에 잘 실행되던 코드가
webdriverexception message unknown error call function result missing 'value' 이란 에러가 뜬다.
구글 검색을 시도 했더니 크롬 브라우저가 업데이트 되어 생긴 이슈라고 한다.
해결방법은 2가지로
1. 크롬 브라우저를 (downgrade)낮춘다.
2. Chromedriver를 최신버전으로 변경한다.
출처 : https://blog.naver.com/hamusj/221230439095
※ find_elements_by_xpath()도 기억해 둘 것 !
div.find_elements_by_xpath('./ul/li') 와 같이 현재 elemement에서의 상대적 위치를 지정, 정확하게 필요한 요소에만 접근 가능함.
※ 최종 element에서 text는 항상 있지만 title은 없을 수 있음
※ 최종 element에서 attribute는 get_attribute(attr_name) 으로 얻어 올 수 있다.
|
181003 추가 (Chapter 10)
- find_element_by_linek_text(str) : <a ...> </a> 문자열 을 통한 항목 찾기: ex) btn = driver.find_element_by_link_text("로그인")btn.click()
Action chain의 활용
driver = webdriver.Chrome('./chromedriver') : 크롬드라이버가 실행됨
import time
from selenium import webdriver
driver = webdriver.Chrome('./chromedriver')
try:
elem = driver.find_element_by_name('username')
elem.send_keys('id')
elem = driver.find_element_by_name('password')
elem.send_kyes('password')
elem.sendkeys(Keys.RETURN)
time.sleep(2)
elem = driver.find_element_by_class_name('_eduze')
action = ActionChains(driver)
# 다음 내용들은 perform()에 의해 일괄적으로 수행됨
action.move_to_element(elem)
action.click()
action.send_keys('#파이썬')
action.perform()
time.sleep(2)
action.reset_actions()
action.move_by_offset(0,50)
action.click() # 오른쪽 마우스는 context_click()
action.perform()
input() # 사용자 입력을 통해 종료
|
댓글 없음:
댓글 쓰기