from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
우선 위 세 가지 코드:
Selenium을 사용하기 위해서는 드라이버 객체를 만들어야하는데, 이 객체는 한 개의 브라우저에 종속된다.
with-as 구문을 사용하여, 오픈된 브라우저를 닫아주자.
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("https://www.example.com")
print(driver.page_source)
결과.
from selenium.webdriver.common.by import By
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("https://www.example.com")
print(driver.find_element(By.TAG_NAME, "p").text)
for element in driver.find_elements(By.TAG_NAME, "p"):
print(element.text)
find_elements의 리턴값은 리스트임으로, 바로 텍스트를 출력할 수 없다.
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("https://indistreet.com/live?sortOption=startDate%3ADESC")
driver.implicitly_wait(10)
driver.find_element(By.XPATH, '//*[@id="__next"]/div/main/div[2]/div/div[4]/div[1]/div[1]/div/a/div[1]/div/span/img')
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
driver.get("https://indistreet.com/live?sortOption=startDate%3ADESC")
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="__next"]/div/main/div[2]/div/div[4]/div[1]/div[1]/div/a/div[1]/div')))
print(element)
Explicit Wait를 사용하기 위해서는 두 패키지를 불러와야한다.
EC는 패키지 이름대로, 기다리는 조건이고,
WebDriverWait 또한 이름 그대로이다.
from selenium.webdriver import ActionChains
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://qna.programmers.co.kr/")
driver.implicitly_wait(0.5)
button = driver.find_element(By.XPATH, '//*[@id="main-app-gnb-header"]/div/div/div[1]/div/div[2]/div/div/div[1]/span[1]/a[1]')
ActionChains(driver).click(button).perform()
위 패키지 이외에 ActionChains라는 패키지를 import 한다.
나머지는 self-explanatory.
이렇게 하면 로그인 페이지 오픈까지 진행된다.
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://qna.programmers.co.kr/")
driver.implicitly_wait(0.5)
# 홈페이지 로그인 버튼 클릭
button = driver.find_element(By.XPATH, '//*[@id="main-app-gnb-header"]/div/div/div[1]/div/div[2]/div/div/div[1]/span[1]/a[1]')
ActionChains(driver).click(button).perform()
time.sleep(1)
# 아이디 입력
id_input = driver.find_element(By.XPATH, '//*[@id="main-app-account"]/div/div[2]/div/div[2]/div[1]/div/div[2]/div[2]/input')
ActionChains(driver).send_keys_to_element(id_input, "YOUR_USER_NAME").perform()
time.sleep(1)
# 패스워드 입력
pw_input = driver.find_element(By.XPATH, '//*[@id="main-app-account"]/div/div[2]/div/div[2]/div[1]/div/div[2]/div[4]/input')
ActionChains(driver).send_keys_to_element(pw_input, "YOUR_PASSWORD").perform()
time.sleep(1)
# 로그인 버튼 클릭
login_button = driver.find_element(By.XPATH, '//*[@id="main-app-account"]/div/div[2]/div/div[2]/div[1]/div/div[2]/button')
ActionChains(driver).click(login_button).perform()
위와 같이 진행하면 된다.
웹스크레이핑은 처음 해봤는데, 재밌었다!
완전 기초지만, 강의가 없었다면 Docs를 뒤져보면서 하기에는 빡세겠다.