Selenium(headless Chrome)에서 CSS3 Selector 이용하기
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
PhantomJS 지원 종료 안내
PhantomJS는 현재 개발이 중단되었습니다. Headless Chrome/Firefox와 Selenium WebDriver(ChromeDriver/GeckoDriver) 또는 Playwright 등 최신 대안을 사용하세요.
9. Selenium(headless Chrome)에서 CSS3 Selector 이용하기¶
- docs : http://saucelabs.com/resources/articles/selenium-tips-css-selectors
- 아이디의 경우 앞에 #
- 클래스의 경우 앞에 .
- 하위 태그는 >
9.1 클래스로 찾기 예¶
In [22]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202180355822')
# 클래스가 tit_view인 h3태그
title = driver.find_element(By.CSS_SELECTOR, "h3.tit_view")
print(title.text)
driver.quit()
연습문제 (다음 코드 문제점 확인하고 수정하기)
아이디로 찾기
- 팁: 이전 시간에 설명한 CSS Selector 내용 상기
1. 에러 메세지를 읽고, 어떤 라인에서 문제가 있는지를 확인한 후
2. 해당 라인의 코드에 어떤 문제가 있는지를 CSS Selector 문법과 해당 웹페이지 소스를 비교해가며 확인
아이디로 찾기
- 팁: 이전 시간에 설명한 CSS Selector 내용 상기
1. 에러 메세지를 읽고, 어떤 라인에서 문제가 있는지를 확인한 후
2. 해당 라인의 코드에 어떤 문제가 있는지를 CSS Selector 문법과 해당 웹페이지 소스를 비교해가며 확인
In [ ]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202180355822')
title_data = driver.find_element(By.CSS_SELECTOR, 'html head title')
print(title_data.get_attribute('text'))
title_data = driver.find_element(By.CSS_SELECTOR, 'html > title')
# head 태그 안에 있는 title 정보는 get_attribute('text') 메서드로 추출할 수 있습니다.
print(title_data.get_attribute('text'))
contents = driver.find_element(By.CSS_SELECTOR, "div#harmonyContainer")
# body 안에 있는 태그 요소는 .text 로 추출할 수 있습니다. (출력이 잘 안되면, 둘다 써보셔도 좋습니다.)
print(contents.text)
for p in contents.find_elements(By.TAG_NAME, 'p'):
print(p.text)
driver.quit()
- 속성으로 찾기
In [25]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202180355822')
# role attribute가 navigation인 div태그
nav = driver.find_element(By.CSS_SELECTOR, "div[role='navigation']")
print(nav.text)
driver.quit()