WebスクレイピングのためのUnDetected ChromeDriverの使い方

Advanced Data Extraction Specialist
Undetected ChromeDriverを用いたWebスクレイピングにおけるアンチボットシステムの回避方法、ステップバイステップガイド、高度な手法、重要な制限事項について解説します。さらに、プロフェッショナルなスクレイピングニーズのためのより堅牢な代替手段であるScrapelessについても学習します。
このガイドで学習する内容:
- Undetected ChromeDriverとは何か、そしてどのように役立つのか
- ボット検出を最小限に抑える方法
- Pythonを用いたWebスクレイピングでの使用方法
- 高度な使用方法と手法
- 主要な制限事項と欠点
- 推奨される代替手段:Scrapeless
- アンチボット検出メカニズムの技術分析
始めましょう!
Undetected ChromeDriverとは?
Undetected ChromeDriverは、SeleniumのChromeDriverの最適化バージョンを提供するPythonライブラリです。これは、以下のアンチボットサービスによる検出を制限するために修正されています。
- Imperva
- DataDome
- Distil Networks
- その他...
また、特定のCloudflare保護を回避するの助けにもなりますが、これはより困難な場合があります。
Seleniumのようなブラウザ自動化ツールを使用したことがある場合、プログラムでブラウザを制御できることをご存知でしょう。それを可能にするために、通常のユーザー設定とは異なる方法でブラウザを構成します。
アンチボットシステムは、それらの違い、つまり「リーク」を探して、自動化されたブラウザボットを識別します。Undetected ChromeDriverはChromeドライバを修正してこれらの特徴的な兆候を最小限に抑え、ボット検出を削減します。これは、アンチスクレイピング対策で保護されたWebサイトをスクレイピングするのに理想的です!
Undetected ChromeDriverの動作原理
Undetected ChromeDriverは、以下の手法を用いることで、Cloudflare、Imperva、DataDome、および同様のソリューションからの検出を削減します。
- 実際のブラウザで使用されているものと同様のSelenium変数を名前変更する
- 検出を回避するために、正当で現実世界のユーザーエージェント文字列を使用する
- ユーザーが自然な人間の操作をシミュレートできるようにする
- Webサイトをナビゲートする際に、Cookieとセッションを適切に管理する
- プロキシの使用を有効にしてIPブロックを回避することと、レート制限を防ぐ
これらの方法は、ライブラリによって制御されるブラウザが様々なアンチスクレイピング防御を効果的に回避するのに役立ちます。
WebスクレイピングのためのUndetected ChromeDriverの使用:ステップバイステップガイド
ステップ1:前提条件とプロジェクトの設定
Undetected ChromeDriverには、以下の前提条件があります。
- 最新バージョンのChrome
- Python 3.6以上:お使いのマシンにPython 3.6以降がインストールされていない場合は、公式ウェブサイトからダウンロードしてインストール手順に従ってください。
**注記:**このライブラリは、ドライババイナリを自動的にダウンロードして修正するため、ChromeDriverを手動でダウンロードする必要はありません。
プロジェクト用のディレクトリを作成します。
language
mkdir undetected-chromedriver-scraper
cd undetected-chromedriver-scraper
python -m venv env
仮想環境をアクティブ化します。
language
# LinuxまたはmacOSの場合
source env/bin/activate
# Windowsの場合
env\Scripts\activate
ステップ2:Undetected ChromeDriverのインストール
pipパッケージを介してUndetected ChromeDriverをインストールします。
language
pip install undetected_chromedriver
このライブラリは、依存関係の1つであるため、Seleniumを自動的にインストールします。
ステップ3:初期設定
scraper.pyファイルを作成し、undetected_chromedriverをインポートします。
language
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import json
# Chromeインスタンスを初期化
driver = uc.Chrome()
# ターゲットページに接続
driver.get("https://scrapeless.com")
# スクラピングロジック...
# ブラウザを閉じる
driver.quit()
ステップ4:スクレイピングロジックの実装
それでは、Appleページからデータを取得するロジックを追加しましょう。
language
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
import json
import time
# Chromeウェブドライバインスタンスを作成
driver = uc.Chrome()
# Appleのウェブサイトに接続
driver.get("https://www.apple.com/fr/")
# ページが完全に読み込まれるまで少し時間をおく
time.sleep(3)
# 商品情報を保存するための辞書
apple_products = {}
try:
# 商品セクションを見つける(提供されたHTMLのクラスを使用)
product_sections = driver.find_elements(By.CSS_SELECTOR, ".homepage-section.collection-module .unit-wrapper")
for i, section in enumerate(product_sections):
try:
# 商品名(見出し)を取得
headline = section.find_element(By.CSS_SELECTOR, ".headline, .logo-image").get_attribute("textContent").strip()
# 説明(副題)を取得
subhead_element = section.find_element(By.CSS_SELECTOR, ".subhead")
subhead = subhead_element.text
# リンクがあれば取得
link = ""
try:
link_element = section.find_element(By.CSS_SELECTOR, ".unit-link")
link = link_element.get_attribute("href")
except:
pass
apple_products[f"product_{i+1}"] = {
"name": headline,
"description": subhead,
"link": link
}
except Exception as e:
print(f"セクション{i+1}の処理中にエラーが発生しました:{e}")
# スクラップしたデータをJSONにエクスポート
with open("apple_products.json", "w", encoding="utf-8") as json_file:
json.dump(apple_products, json_file, indent=4, ensure_ascii=False)
print(f"{len(apple_products)}個のApple製品を正常にスクレイピングしました")
except Exception as e:
print(f"スクレイピング中にエラーが発生しました:{e}")
finally:
# ブラウザを閉じ、リソースを解放する
driver.quit()
実行するには:
language
python scraper.py
Undetected ChromeDriver:高度な使用方法
ライブラリの動作が分かったところで、より高度なシナリオを探求しましょう。
特定のChromeバージョンの選択
version_main引数を設定することで、ライブラリが使用する特定のバージョンのChromeを指定できます。
language
import undetected_chromedriver as uc
# Chromeのターゲットバージョンを指定
driver = uc.Chrome(version_main=105)
with構文
ドライバが不要になったときにquit()メソッドを手動で呼び出すのを避けるには、with構文を使用できます。
language
import undetected_chromedriver as uc
with uc.Chrome() as driver:
driver.get("https://example.com")
# それ以降のコード...
Undetected ChromeDriverの制限事項
undetected_chromedriverは強力なPythonライブラリですが、いくつかの既知の制限事項があります。
IPブロック
このライブラリはIPアドレスを隠しません。データセンターからスクリプトを実行している場合、検出される可能性が高くなります。同様に、自宅のIPアドレスの評判が悪い場合もブロックされる可能性があります。
IPアドレスを隠すには、前に示したように、制御されたブラウザをプロキシサーバーと統合する必要があります。
GUIナビゲーションのサポートなし
モジュールの内部動作のため、get()メソッドを使用してプログラムでブラウジングする必要があります。キーボードやマウスを使用してページと対話する—手動でブラウザのGUIを使用しないでください。ページを手動で操作すると、検出のリスクが高まります。
ヘッドレスモードの限定的なサポート
公式には、ヘッドレスモードはundetected_chromedriverライブラリで完全にサポートされていません。ただし、次のようにして実験できます。
language
driver = uc.Chrome(headless=True)
安定性の問題
検出アルゴリズムの理解と対策に向けた継続的な努力以外、保証は提供されません。今日アンチボットシステムを回避することに成功したスクリプトは、保護方法が更新された場合、明日には失敗する可能性があります。多数の要因により、結果は異なる場合があります。
推奨される代替手段:Scrapeless
Undetected ChromeDriverの制限事項を考えると、ScrapelessはブロックされることなくWebスクレイピングを行うための、より堅牢で信頼性の高い代替手段を提供します。
当サイトはウェブサイトのプライバシーを厳格に保護しています。このブログのすべてのデータは公開されており、クロールプロセスのデモンストレーションのみに使用されます。いかなる情報やデータも保存しません。
Scrapelessが優れている理由
Scrapelessは、Undetected ChromeDriverアプローチの固有の問題に対処するリモートブラウザサービスです。
-
継続的なアップデート:アンチボットシステムのアップデート後に動作しなくなる可能性のあるUndetected ChromeDriverとは異なり、Scrapelessはチームによって継続的にアップデートされます。
-
組み込みのIPローテーション:Scrapelessは自動IPローテーションを提供し、Undetected ChromeDriverのIPブロックの問題を解消します。
-
最適化された構成:Scrapelessブラウザはすでに検出を回避するように最適化されているため、プロセスが大幅に簡素化されます。
-
CAPTCHAの自動解決:Scrapelessは、発生する可能性のあるCAPTCHAを自動的に解決できます。
-
複数のフレームワークとの互換性:Playwright、Puppeteer、その他の自動化ツールと連携します。
無料トライアルのためにScrapelessにサインインしてください。
推奨される読書:Puppeteerを使用したCloudflareの回避方法
Webをスクレイピングする方法(ブロックされずに)
Playwrightを使用してScrapelessで同様のソリューションを実装する方法は次のとおりです。
ステップ1:Scrapelessに登録し、ログインします
ステップ2:Scrapeless API KEYを取得します

ステップ3:次のコードをプロジェクトに統合できます
language
const {chromium} = require('playwright-core');
// Scrapeless接続URL(トークン付き)
const connectionURL = 'wss://browser.scrapeless.com/browser?token=YOUR_TOKEN_HERE&session_ttl=180&proxy_country=ANY';
(async () => {
// リモートScrapelessブラウザに接続
const browser = await chromium.connectOverCDP(connectionURL);
try {
// 新しいページを作成
const page = await browser.newPage();
// Appleのウェブサイトに移動
console.log('Appleのウェブサイトに移動しています...');
await page.goto('https://www.apple.com/fr/', {
waitUntil: 'domcontentloaded',
timeout: 60000
});
console.log('ページが正常に読み込まれました');
// 商品セクションが利用可能になるまで待機
await page.waitForSelector('.homepage-section.collection-module', { timeout: 10000 });
// ホームページから注目商品を取得
const products = await page.evaluate(() => {
const results = [];
// すべての商品セクションを取得
const productSections = document.querySelectorAll('.homepage-section.collection-module .unit-wrapper');
productSections.forEach((section, index) => {
try {
// 商品名を取得 - .headlineまたは.logo-imageにある可能性があります
const headlineEl = section.querySelector('.headline') || section.querySelector('.logo-image');
const headline = headlineEl ? headlineEl.textContent.trim() : '不明な商品';
// 商品の説明を取得
const subheadEl = section.querySelector('.subhead');
const subhead = subheadEl ? subheadEl.textContent.trim() : '';
// 商品リンクを取得
const linkEl = section.querySelector('.unit-link');
const link = linkEl ? linkEl.getAttribute('href') : '';
results.push({
name: headline,
description: subhead,
link: link
});
} catch (err) {
console.error(`セクション${index}の処理中にエラーが発生しました:${err.message}`);
}
});
return results;
});
// 結果を表示
console.log('見つかったApple製品:');
console.log(JSON.stringify(products, null, 2));
console.log(`見つかった商品の合計数:${products.length}`);
} catch (error) {
console.error('エラーが発生しました:', error);
} finally {
// ブラウザを閉じる
await browser.close();
console.log('ブラウザが閉じられました');
}
})();
また、ScrapelessのDiscordに参加して、開発者サポートプログラムに参加し、最大50万SERP API使用クレジットを無料で受け取ることができます。
強化された技術分析
ボット検出:その仕組み
アンチボットシステムは、自動化を検出するためにいくつかの手法を使用します。
-
ブラウザフィンガープリンティング:数十のブラウザプロパティ(フォント、キャンバス、WebGLなど)を収集して、独自の署名を作成します。
-
WebDriver検出:WebDriver APIまたはそのアーティファクトの存在を確認します。
-
行動分析:マウスの動き、クリック、タイピング速度を分析し、人間とボットを区別します。
-
ナビゲーション異常検出:速すぎるリクエストや画像/CSSの読み込み不足などの疑わしいパターンを識別します。
推奨される読書:アンチボットの回避方法
Undetected ChromeDriverによる検出の回避方法
Undetected ChromeDriverは、次の方法でこれらの検出を回避します。
-
WebDriverインジケーターの削除:
navigator.webdriver
プロパティおよびその他のWebDriverトレースを削除します。 -
Cdc_のパッチ適用:ChromeDriverの既知の署名であるChrome Driver Controller変数を変更します。
-
現実的なユーザーエージェントの使用:デフォルトのユーザーエージェントを最新の文字列に置き換えます。
-
構成変更の最小化:Chromeブラウザのデフォルト動作への変更を減らします。
Undetected ChromeDriverがドライバにパッチを適用する方法を示す技術コード:
language
Undetected ChromeDriverソースコードからの簡略化された抜粋
def _patch_driver_executable():
"""
自動化の兆候を削除するためにChromeDriverバイナリにパッチを適用します
"""
linect = 0
replacement = os.urandom(32).hex()
with io.open(self.executable_path, "r+b") as fh:
for line in iter(lambda: fh.readline(), b""):
if b"cdc_" in line.lower():
fh.seek(-len(line), 1)
newline = re.sub(
b"cdc_.{22}", b"cdc_" + replacement.encode(), line
)
fh.write(newline)
linect += 1
return linect
Scrapelessがより効果的な理由
Scrapelessは、次のような異なるアプローチを取ります。
-
事前構成済みの環境:人間のユーザーを模倣するように最適化されたブラウザを使用します。
-
クラウドベースのインフラストラクチャ:適切なフィンガープリンティングでクラウドでブラウザを実行します。
-
インテリジェントなプロキシローテーション:ターゲットサイトに基づいてIPを自動的にローテーションします。
-
高度なフィンガープリンティング管理:セッション全体で一貫したブラウザフィンガープリントを維持します。
-
WebRTC、Canvas、およびプラグインの抑制:一般的なフィンガープリンティング手法をブロックします。
無料トライアルのためにScrapelessにサインインしてください。
まとめ
この記事では、Undetected ChromeDriverを使用してSeleniumでのボット検出に対処する方法を学習しました。このライブラリは、ブロックされることなくWebスクレイピングを行うための、パッチが適用されたバージョンのChromeDriverを提供します。
問題は、Cloudflareのような高度なアンチボットテクノロジーが、スクリプトを検出してブロックできることです。undetected_chromedriverのようなライブラリは不安定です。今日動作する可能性がありますが、明日は動作しない可能性があります。
プロフェッショナルなスクレイピングニーズの場合、Scrapelessのようなクラウドベースのソリューションは、より堅牢な代替手段を提供します。これらは、IPローテーションやCAPTCHA解決などの追加機能を備えた、アンチボット対策を回避するように特別に設計された、事前構成済みのリモートブラウザを提供します。
Undetected ChromeDriverとScrapelessのどちらを選択するかは、特定のニーズによって異なります。
- Undetected ChromeDriver:小規模なプロジェクトに適しており、無料かつオープンソースですが、より多くのメンテナンスが必要で、信頼性が低い可能性があります。
- Scrapeless:プロフェッショナルなスクレイピングニーズに適しており、より信頼性が高く、常に更新されますが、サブスクリプションコストがかかります。
これらのアンチボット回避テクノロジーの動作を理解することで、Webスクレイピングプロジェクトに最適なツールを選択し、自動データ収集の一般的な落とし穴を回避できます。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。