0.undetected_chromdriverとは何ですか?
ウェブスクレイピング(クローリング)とウェブ自動化は、現代の多くのデータ分析およびウェブ開発作業で重要な役割を果たしています。これらの作業のための最も広く使用されているツールは、SeleniumとChromedriverです。
Seleniumは元々ウェブアプリケーションのテストを自動化するために作成されたツールですが、その機能性と汎用性から、データアナリストやウェブ開発者たちの間でウェブスクレイピングツールとして広く使用されています。
Chromedriverは、SeleniumフレームワークでGoogle Chromeブラウザを制御するためのWebDriverです。これにより、開発者は自動化されたテストスクリプトを実行してウェブサイトをナビゲートしたり、ユーザーと同様の動作(クリック、スクロールなど)を自動的に実行したりすることができます。
しかし、これらの基本ツールを使用してウェブサイトをクローリングすると、ほとんどの現代のウェブサイトはこのような自動化されたアクセスを検知してブロックするセキュリティメカニズムを持っています。たとえば、セキュリティが重要なサイトをクローリングしようとすると、Seleniumとchrome driverを介してクローリングしようとすると、サイトは自らのデータを保護するためにこれらの作業をボットと見なして検知し、ブロックします。このような状況でundetected_chromedriverの必要性が浮かび上がります。
undetected_chromedriverは通常のChromedriverとは異なり、ウェブサイトの自動化を検知してブロックする方法を回避できるようにするPythonライブラリです。つまり、クローリングスクリプトの実行が自動化ボットではなく実際の人間のように見えるようにします。
これにより、ウェブサイトが提供するデータをより安定して効率的に収集することができます。undetected_chromedriverは、SeleniumとChromedriverに精通した開発者がウェブスクレイピングセキュリティに関する追加の知識なしに、このような検知メカニズムを迂回できるようにします。
このようにundetected_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 = uc.ChromeOptionsはオプションを追加できるように作成します。
# 팝업 차단을 활성화합니다.
options.add_argument('--disable-popup-blocking')
# WebDriver 객체 생성
driver = uc.Chrome( options = options,enable_cdp_events=True,incognito=True)
# selenium_stealth 설정
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.get('[원하는 웹사이트 방문]')
# 대기 시간 설정 => 대기 시간을 설정하여, html이 렌더링 되는 시간을 벌어줍니다.
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プロパティを再定義するJavaScriptコードを実行する方法です。これにより、ウェブサイトがスクレイパーを検知する別の方法をブロックできます。
driver.delete_all_cookies()を使用して、すべてのクッキーを削除することは、ウェブサイトが以前の訪問を追跡するのを防ぐのに役立ちます。
これらのさまざまなオプションを使用してundetected chromedriverを動作させることができます。
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("치단당함")
このように、従来のchromedriverとseleniumを使用していた方法でコードを挿入します。
2.ChromeDriverとundetected_chromedriverの主な違い
1) 強化された機能: undetected_chromedriverは通常のChromeDriverよりも強化されたanti-bot検査を回避する機能を持っています。これは、一部のウェブサイトが自動化された行動、例えばウェブスクレイピングを防ぐために使用する防御メカニズムを回避するために設計されています。
2) ステルスモード: undetected_chromedriverは、Seleniumを使用した自動化行動をよりよく隠すためのいくつかの追加技術を導入しています。これには、navigator.webdriverフラグの削除、WebGLベンダーの設定、言語プラグインの順序設定、解像度設定などが含まれます。要するに、chromedriverのフルオプションを追加したと考えると簡単です。
3) 反応性: 一部のユーザーはundetected_chromedriverが通常のChromeDriverよりも速く反応性が良いと感じています。これは、一部のウェブサイトによって異なり、すべてのウェブサイトで動作するわけではありません。
3.結論
ウェブサイトは常に新しい防御メカニズムを開発し適用しているため、最新の防御技術を回避するには、継続的な研究とアプローチが必要です。
この記事も読んでみてください:
データ収集、今度は自動化
コーディング不要で5分で開始 · 5,000以上のウェブサイトをクローリングした経験




