반응형
파이썬, 셀레니움 옵션 최적화 스크롤링 예제
글. 수알치 오상문
Daum 사이트에 접속하여 '수알치'를 검색하고 수알치 블로그를 찾아서 블로그로 이동하는 예제이다.
시간 테스트를 해봤는데 일단 현재 옵션에서도 좋은 결과가 나오는 것 같다.
크롬 브라우저를 동작하고 다른 옵션을 사용하지 않는 경우에 비해 시간은 30% 걸린 것 같다.
사용자 환경에 따라서 성능은 달라질 수 있지만, 이런 옵션을 적용하면 속도 향상에는 확실히 효과가 있다.
[참고] Chrome Webdriver를 Headless 모드로 실행하면 profile들이 적용되지 않는다는 글을 본 적 있는데, 실제로 이렇게 적용하고 실행해면 오류 메시지가 나오기는 하는데 크롤링에는 지장 없다.
#selenium options 예제
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# ----------
from selenium.common.exceptions import StaleElementReferenceException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from multiprocessing import Pool
import urllib.request
import pandas as pd
import time
import os
# -----------
options = Options()
# 웹브라우저 사용 안함
options.add_argument('headless')
# 창 크기
options.add_argument('window-size=1920x3072')
# 전체 화면
options.add_argument('--start-fullscreen')
# user-agent 설정하기
user_agent = "Mozilla/5.0 (Linux; Android 9; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.83 Mobile Safari/537.36"
options.add_argument('user-agent=' + user_agent)
# 이미지 로딩 금지
options.add_argument('--blink-settings=imagesEnabled=false')
# 음소거
options.add_argument('--mute-audio')
# 시크릿 모드 실행
options.add_argument('incognito')
# 속도 향상을 위한 옵션 해제 (10% 속도 향상?)
prefs = {
'profile.default_content_setting_values': {
'cookies': 2,
'images': 2,
'plugins': 2,
'popups': 2,
'geolocation': 2,
'notifications': 2,
'auto_select_certificate': 2,
'mouselock': 2,
'mixed_script': 2,
'media_stream': 2,
'media_stream_mic': 2,
'media_stream_camera': 2,
'protocol_handlers': 2,
'ppapi_broker': 2,
'automatic_downloads': 2,
'midi_sysex': 2,
'push_messaging': 2,
'ssl_cert_decisions': 2,
'metro_switch_to_desktop': 2,
'protected_media_identifier': 2,
'app_banner': 2,
'site_engagement': 2,
'durable_storage': 2}
}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=options) # Deprecation: chrome_options=options
start = time.time()
driver.get("https://www.daum.net")
el = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="q"]')))
try:
el = driver.find_element(By.XPATH, '//*[@id="q"]')
el.send_keys("수알치")
el.send_keys(Keys.ENTER)
except Exception as e:
print("Error:", e)
try: # 수알치 블로그 클릭
el = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH,
'//*[@id="siteColl"]/div[2]/ul/li[1]/a/div[1]/span/span[2]')))
el.click()
except Exception as e:
print("Error:", e)
else:
print("시간: %.2f초" %(time.time() - start))
print("OK, 수알치 블로그!")
input("QUIT(press <Enter>): ")
driver.close()
driver.quit()
반응형
'웹 크롤링, 스크래핑' 카테고리의 다른 글
파이썬, Scrapy 크롤링 예제 (0) | 2022.08.01 |
---|---|
파이썬, Scarpy 스크래피 설치 ERROR: Could not find a version that satisfies the requirement scarpy (from versions: none) (0) | 2022.08.01 |
셀레니움, 크롤링 안전한 예외처리 예제 (0) | 2022.08.01 |
셀레니움, NameError: name 'StaleElementReferenceException' is not defined (0) | 2022.08.01 |
파이썬 셀레니움, 열린 경고창 닫기 (0) | 2022.07.31 |