나도 코딩님의 파이썬 웹 스크래핑 강의 정리
https://www.youtube.com/watch?v=yQ20jZwDjTE
1. Selenium 설치
웹 자동화 테스트 툴이다.
pip install selenium
크롬 웹드라이버 설치
크롬을 자유롭게 제어할 수 있는 실행파일이다.
chrome://version 접속 -> chromedriver에서 알맞은 버전 다운로드 후 설치
*M1 맥북에서 chromedriver 실행파일을 열 수 없을 때
터미널로 chromedriver가 있는 디렉토리로 이동하여 아래 명령어를 입력해주면 된다.
xattr -d com.apple.quarantine {크롬 드라이버 파일명(chromedriver)}
이후 다시 실행해보면 잘 실행된다.
2. 기본 사용법
naver에 접속하여 login 버튼을 클릭해본다.
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://naver.com")
elem = browser.find_element(by="xpath", value='//*[@id="account"]/a')
elem.click()
* Circular Import webdriver 에러 관련
혹시라도 webdriver.Chrome() 관련 Circular Import 에러가 난다면 파일 이름 자체를 selenium.py로 했기 때문일 확률이 높다. 이런 경우 그냥 해당 파일을 삭제하고 다른 이름으로 파일을 만들면 된다.
기본 문법들
기본 조작
위 코드를 Python Console에서 실행하면 실시간으로 브라우저 화면과 함께 코딩을 해볼 수 있다.
{요소}.click() : 요소 클릭
{브라우저}.back() : 뒤로 가기
{브라우저}.forward() : 앞으로 가기
{브라우저}.refresh() : 새로 고침
{브라우저}.close() : 탭 닫기
{브라우저}.quit() : 브라우저 자체를 종료
key 입력
key 입력을 하기 위해서는 아래 모듈을 import 해야한다.
from selenium.webdriver.common.keys import Keys
다음으로 검색창 요소를 불러온 뒤 send_keys() 메서드로 검색어를 입력할 수 있다.
elem = browser.find_element(by="xpath", value='//*[@id="query"]')
elem.send_keys("테스트 입력")
엔터 입력
elem.send_keys(Keys.ENTER)
속성 가져오기
elem.get_attribute("href")
input창에서 입력값 제거하기
elem.clear()
유용한 메서드들
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
어떤 요소가 로딩될때까지 기다리기
elem2 = WebDriverWait(browser, 10).until(EC.presence_of_element_located(By.XPATH, "//*[@id='content']/div[2]/..."))
위 코드가 제대로 작동하지 않으면 에러가 나기 때문에, 일반적으로 try - except 구문으로 처리한다.
스크롤 내리기
execute_script 구문을 통해 자바 스크립트 문법을 수행할 수 있다.
browser = webdriver.Chrome()
browser.execute_script("window.scrollTo(0, 1080)") # 모니터 해상도 높이 1080만큼 내림
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)") # 현재 문서의 가장 아래로 스크롤 내림
시간 간격마다 스크롤 내려서 가장 밑으로 내리기
import time
interval = 2
prev_height = browser.execute_script("return document.body.scrollHeight")
while True:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
time.sleep(interval)
curr_height = browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")
if curr_height == prev_height:
break
prev_height = curr_height
3. Headless Chrome
굳이 직접 브라우저창을 띄우지 않고 원하는 작업만 수행할 수 있도록 해준다. 추가로 window-size 옵션은 백그라운드로 크롬창을 띄울 때 창의 크기를 설정해줄 수 있는 옵션이다.
options = webdriver.ChromeOptions()
options.add_argument(argument="headless")
options.add_argument("window-size=1920x1080")
# 기존 코드
browser = webdriver.Chrome()
## 이하 생략
스크린샷 찍기
headless 브라우저로 실행해도 중간중간 스크린샷을 찍으며 과정을 기록할 수도 있다.
browser.get_screenshot_as_file("test_screenshot.png")
'Programming-[Backend] > Python' 카테고리의 다른 글
[TIL] python @patch doesn't work, @patch 작동 안함. mock (1) | 2023.03.21 |
---|---|
[링크] 파이썬 assert, raise 차이 (0) | 2023.03.02 |
[링크] 파이썬 가상환경 venv, Pycharm (0) | 2023.02.27 |
웹 스크래핑, 크롤링- 1. 기본 개념, BeautifulSoup 이미지, CSV 다운로드 (0) | 2023.02.26 |
[TIL] python locale, OS의 locale (0) | 2023.02.13 |