python/python_selenium
Headless 크롬
몽자비루
2023. 4. 29. 17:41
from bs4 import BeautifulSoup
import time
from selenium import webdriver
options = webdriver.ChromeOptions()
# headless 즉, 창을 띄우지않고 랜더링을 통해 크롤링 가능
# 다만 해당의 경우, user-agent가 headless로 인식되어 몇몇 사이트에서 막을 수 있다.
options.headless = True
options.add_argument("window-size=1920x1080")
# 아래와 같이 user-agent를 나와 같은 상태로 만들 수 있음.
options.add_argument("user-agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36")
browser = webdriver.Chrome(options= options)
url = "<https://play.google.com/store/games>"
browser.get(url)
time.sleep(1)
browser.execute_script("window.scrollTo(0,1080)")
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)")
interval = 2
pre_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("return document.body.scrollHeight")
if pre_height == curr_height:
break
pre_height = curr_height
print("스크롤 완료")
# 창이 없기 때문에 잘 작동하는지 확인하기 어렵다.
# 이럴 때 아래와 같이 스크린샷 파일로 현재 상태를 저장할 수 있음.
browser.get_screenshot_as_file("google_game.png")
soup = BeautifulSoup(browser.page_source, "lxml")
- 브라우저를 띄우게 되면 메모리 소요가 높고 속도가 느림.
- 브라우저를 띄울 필요 없이 서버에서 웹스크래핑 작업을 할 때 유용함.
- options = webdriver.ChromeOptions() options.headless = True
browser = webdriver.Chrome(options= options) 를 사용해서
webdriver의 옵션에 headless 기능을 추가함. - user-agent가 headless가 되어 일부 웹사이트에서는 접근을 막을 수 있음.
ㄴ user-agent를 지정함으로써 해당 웹사이트에서도 크롤링 가능. - browser.get_screenshot_as_file("fime_name") 을 통해 스크린샷 파일로 현재상태 확인 가능.