데이터 수집 고수들만이 알고 있는 최강 크롤링 비법 대공개! undetected_chromedriver에 대해서

데이터 수집 고수들만이 알고 있는 최강 크롤링 비법 대공개! undetected_chromedriver에 대한 정보. 웹 스크래핑과 자동화에 대한 효율적인 방법을 알려드립니다.

10
데이터 수집 고수들만이 알고 있는 최강 크롤링 비법 대공개! undetected_chromedriver에 대해서

0. undetected_chromedriver란 무엇인가?

웹 스크래핑(크롤링)과 웹 자동화는 오늘날 많은 데이터 분석 및 웹 개발 작업에서 중요한 역할을 하고 있습니다. 이러한 작업을 위한 도구 중에서 가장 널리 사용되는 것이 Selenium과 Chromedriver입니다.

Selenium은 원래 웹 애플리케이션의 테스트를 자동화하기 위해 만들어진 도구지만, 그 기능성과 범용성 때문에 데이터 분석가와 웹 개발자들 사이에서 웹 스크레이핑 도구로 널리 사용되고 있습니다.

Chromedriver는 Selenium 프레임워크에서 Google Chrome 브라우저를 제어하기 위한 WebDriver입니다. 이를 통해 개발자들은 자동화된 테스트 스크립트를 실행하여 웹사이트를 탐색하거나, 사용자와 같은 행동(클릭, 스크롤 등)을 자동으로 수행할 수 있습니다.

그러나 이러한 기본 도구를 사용하여 웹 사이트를 크롤링하면, 대부분의 현대 웹사이트들은 이러한 자동화된 액세스를 감지하고 차단하는 보안 메커니즘을 가지고 있습니다. 예를 들어, 보안이 상당한 사이트를 크롤링하려고 할 때, Selenium과 chrome driver를 통해서 크롤링하려고 할때, 사이트에서는 자신들의 데이터를 보호하기위해서 이러한 작업들을 봇이라고 생각하여 감지하며, 차단을 합니다. 이런 상황에서 undetected_chromedriver의 필요성이 대두됩니다.

undetected_chromedriver는 일반적인 Chromedriver와는 다르게, 웹 사이트의 자동화를 감지하여 차단하는 방법을 피할 수 있게 해주는 Python 라이브러리입니다. 즉, 크롤링 스크립트를 실행하는 것이 자동화된 봇이 아닌 실제 사람처럼 보이게 만들어 주는 역할을 합니다.

이를 통해, 웹 사이트가 제공하는 데이터를 보다 안정적이고 효율적으로 수집할 수 있습니다. undetected_chromedriver는 Selenium과 Chromedriver에 익숙한 개발자들이 웹 크롤링 보안에 관한 추가적인 지식 없이도 이러한 감지 메커니즘을 우회할 수 있게 해줍니다.

1. 설치 및 사용법

pip install undetected-chromedriver 이렇게 설치를 합니다.

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from fake_useragent import UserAgent
from selenium_stealth import stealth
from selenium.webdriver.chrome.service import Service

options = uc.ChromeOptions()
options.add_argument('--disable-popup-blocking')

driver = uc.Chrome(options=options, enable_cdp_events=True, incognito=True)

stealth(driver,
    vendor="Google Inc.",
    platform="Win32",
    webgl_vendor="intel Inc.",
    renderer="Intel Iris OpenGL Engine",
    fix_hairline=True,
)

options.add_argument('--remote-debugging-port=9222')
driver.implicitly_wait(2)
driver.execute_script("Object.defineProperty(navigator, 'plugins', {get: function() {return[1, 2, 3, 4, 5];}});")

fake_useragent를 사용하여 매 실행마다 다른 사용자 에이전트 문자열을 사용하는 것은 좋은 방법입니다. selenium_stealth를 사용하여 일부 사이트가 웹 스크래퍼를 감지하는데 사용하는 몇 가지 특성을 마스킹할 수 있습니다.

driver.execute_script()를 사용하여 자바스크립트 코드를 실행하여 navigator.plugins 속성을 재정의하는 방법입니다. driver.delete_all_cookies()를 사용하여 모든 쿠키를 삭제하는 것은 웹사이트가 이전 방문을 추적하는 것을 막는 데 도움이 될 수 있습니다.

try:
    driver.find_elements(By.XPATH, "//div[@class='lister__item__inner']/a")[8].click()
    driver.implicitly_wait(2)
    driver.delete_all_cookies()
    driver.execute_script("Object.defineProperty(navigator, 'plugins', {get: function() {return[1, 2, 3, 4, 5];}});")
except:
    print("차단당함")

2. 기존 ChromeDriver와 undetected_chromedriver의 주요 차이점

  1. 강화된 특징: undetected_chromedriver는 일반적인 ChromeDriver에 비해 더 강화된 anti-bot 검사를 우회하는 기능을 가지고 있습니다. 이는 일부 웹사이트들이 자동화된 행동, 예를 들면 웹 스크래핑을 막기 위해 사용하는 방어 메커니즘을 피하기 위해 설계되었습니다.
  2. Stealth 모드: undetected_chromedriver는 Selenium을 사용한 자동화 행동을 더 잘 숨기기 위한 몇 가지 추가적인 기술을 도입하였습니다. navigator.webdriver 플래그 제거, WebGL 밴더 설정, 언어 플러그인 순서 설정, 해상도 설정 등이 포함됩니다.
  3. 반응성: 일부 사용자들은 undetected_chromedriver가 기존 ChromeDriver에 비해 더 빠르고 반응성이 좋다고 보고합니다. 이는 일부 웹사이트에 따라 다르며, 모든 웹사이트가 모두 동작을 하는 것은 아닙니다.

3. 결론

웹사이트들은 계속해서 새로운 방어 메커니즘을 개발하고 적용하기 때문에, 최신의 방어 기술을 피하는 데에는 추가적인 접근 방법에 대한 지속적인 연구와 방법이 필요합니다.

댓글

댓글 작성

이메일은 공개되지 않으며, 답글 알림에만 사용됩니다.

이어서 읽어보세요

새 글 알림 받기

해시스크래퍼 기술 블로그의 새 글이 발행되면 이메일로 알려드립니다.

이메일은 새 글 알림에만 사용됩니다.