[10일차] Selenium 기초

Tony Lee·2023년 4월 20일
0

데브코스

목록 보기
3/5

Selenium 시작하기

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

우선 위 세 가지 코드:

  1. 웹 드라이버
  2. 크롬을 사용하기 위한 크롬 서비스
  3. 크롬 버전을 맞추기 위한 크롬 드라이버 매니저

Selenium을 사용하기 위해서는 드라이버 객체를 만들어야하는데, 이 객체는 한 개의 브라우저에 종속된다.
with-as 구문을 사용하여, 오픈된 브라우저를 닫아주자.

with webdriver.Chrome(service=Service(ChromeDriverManager().install())) as driver:
    driver.get("https://www.example.com")
    print(driver.page_source)

결과.

페이지에 있는 p 태그 불러오기

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의 리턴값은 리스트임으로, 바로 텍스트를 출력할 수 없다.

Wait and Call

  • Implicit wait: 로딩이 완료되거나, 제시한 시간만큼 기다림
  • Explicit wait: 특정 요소를 로딩할 때까지 기다림

Implicit Wait

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')

Explicit Wait

  • until(): 조건이 만족 될 때까지
  • until_not(): 조건이 만족되지 않을 때까지
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를 뒤져보면서 하기에는 빡세겠다.

profile
Striving to have a positive impact on the community

0개의 댓글