[WEB]Selenium

정기홍·2024년 4월 4일

Web Scraping 기초3

목록 보기
1/4

Selenium이란?

  • Python을 이용해서 웹 브라우저를 조작할 수 있는 자동화 프레임워크입니다.
  • Selenium을 사용하기 위해서는 Selenium과 Web Driver가 필요해 설치해줍니다.
pip install selenium
pip install webdriver-manager
  • 사용하기 위해서 우선 Selenium을 불러와 줍니다.
# selenium으로부터 webdriver 모듈을 불러옵니다.

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
  • 불러온 모듈 webdriver에서 Chrome() 객체를 생성합니다.
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

위의 명령어를 통해 웹 브라우저를 실행하고 파이썬과 연동할 수 있습니다.

  • .get(url)을 활용해 요청보내기
# http://www.example.com 으로 요청을 보내봅시다.

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("http://www.example.com")
  • 보낸 요청을 page_source 속성을 통해 Response의 HTML 문서를 확인할 수 있습니다.
# page_source 속성을 확인해봅시다.

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("http://www.example.com")
print(driver.page_source)
  • 만약 크롬창을 명령이 끝나고나면 자동으로 창이 종료되게 하고 싶다면 with-as 구문을 통해 자동으로 종료가 가능하게 할 수 있습니다.
# with-as를 사용해서 위 코드를 다시 적어봅시다.

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

Driver에서 특정 요소 추출하기

  • selenium은 받아온 응답으로부터 특정 요소를 추출할 수도 있습니다.
  • 응답을 가지고 있는 driver/요소에 대해서 다음과 같은 메서드를 적용할 수 있습니다.
    • 요소 하나 찾기
      - .find_element(by, target)
      - by : 대상을 찾는 기준 : ID, TAG_NAME, CLASS_NAME, ...
      - target : 대상의 속성

    • 요소 여러개 찾기
      - .find_elements(by, target)
      - by : 대상을 찾는 기준 : ID, TAG_NAME, CLASS_NAME, ...
      - target : 대상의 속성
  • 모듈을 사용하기 위해 By를 import 해줍니다.
# By를 import해봅시다.

from selenium.webdriver.common.by import By
  • 요소 하나 찾기
# p 태그에 해당하는 요소 하나를 찾아봅시다.

with webdriver.Chrome() as driver:
    driver.get("http://www.example.com")
    print(driver.find_element(By.TAG_NAME, "p").text)
  • 요소 여러개 찾기
# p 태그에 해당하는 요소 여러개를 찾아봅시다.

with webdriver.Chrome() as driver:
    driver.get("http://www.example.com")
    for element in driver.find_elements(By.TAG_NAME, "p"):
        print("Text:", element.text)
profile
늘 새로운걸 도전하는 의지

0개의 댓글