このブログ記事で、あなたは見ることができる:
- Amazon CAPTCHAとは何ですか?
- これを避けるための3つの異なるアプローチ
- これらの技術の完全な比較
始めよう。
Amazon CAPTCHA:はじめに
回避方法を学ぶ前に、Amazon CAPTCHAとは何か、なぜ特定のページに表示されるのかを理解しよう。
定義
Amazon CAPTCHAは、自動化スクリプトを使用してAmazonのページにアクセスしたり、サイト上で自動化されたインタラクションを実行する際に表示されるボット対策です。ほとんどの場合、単純なテキストベースのCAPTCHAとして表示され、画面に表示される文字を入力する必要があります:
上記の課題は単純に見えるかもしれないが、ほとんどのeコマース・ウェブスクレイピング・スクリプトを止めるには十分である。良いニュースは、これが市場で最も高度なCAPTCHAではないということです。
表示時
ここからが厄介なところだ…Amazon CAPTCHAは、決まったシナリオやブラウザの設定下では表示されません。見つかることもあれば、見つからないこともあります。
私たちのテストによると、Selenium、Puppeteer、Playwright などの自動化ツールを使用する際に、CAPTCHA をトリガーする最も一般的なシナリオは以下のとおりです:
- アマゾンの商品ページに直接アクセスする
- 自動検索の実行
- ログインまたは登録を試みる
しかし、これらの行動はどれもCAPTCHAチャレンジを保証するものではないことに注意することが重要です。この行動は良いことだと思うかもしれないが、実際はそうではない!あなたのアマゾンスクレイパーは完璧に動作しているように思われるかもしれませんが、突然、明らかな理由もなくブロックされ始めるのです。
例えば、以下のような単純なSeleniumスクリプトは問題なく動作しますし、CAPTCHAをトリガーすることもできます:
# pip install selenium
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# Configure the browser to launch in headless mode
options = Options()
options.add_argument("--headless")
# Initialize the WebDriver to control Chrome
driver = webdriver.Chrome(service=Service(),options=options)
# Connect to the target page (Amazon Kindle product page)
driver.get("https://www.amazon.com/Amazon-Kindle/dp/B0CNV9F72P")
# Take a screenshot of the entire page
driver.save_screenshot("product-page.png")
# Additional scraping logic...
# Release the driver resources
driver.quit()
正しく実行されれば、スクリプトはこのスクリーンショットを生成する:
一方、実行に失敗した場合は、次のような結果になる:
CAPTCHAの出現は予測不可能であるため、チャレンジを一貫してトリガーする信頼性の高い自動化ロジックを開発するのは困難である。その結果、CAPTCHAの研究も難しい。幸いなことに、だからといってCAPTCHAを回避することが不可能というわけではない。
学ぶべき時だ。
アマゾンのCAPTCHAを回避する方法:3つのテクニック
この章では、AmazonのCAPTCHAに取り組むための3つの異なるアプローチを探ります:
- 隠しブラウザを使う
- AIの活用
- CAPTCHAソルバーを使う
その他の方法については、PythonでCAPTCHAを回避する方法のガイドを参照してください。
さあ、飛び込もう。
方法その1:隠しブラウザを使う
アマゾンを見ていて、何度CAPTCHAを見たことがあるだろうか?見たことがあるとしても、ほとんどない可能性が高い。このことは、アマゾンのボット対策やスクレイピング対策のシステムによって、実際の人間のユーザーが大きな影響を受けないことを示唆している。
ほとんどの場合において、予防は緩和よりも優れている。目標は、CAPTCHAを解くことではなく、CAPTCHAが発動されないようにすることだ。 どうやって? ブラウザの自動化ロジックを設定することで、Amazonのウェブページとやりとりする際に、できるだけ実際の人間のユーザーを模倣することができる。
この目的は、自動化に関連するブラウザ設定を変更するステルス・プラグインを備えたブラウザを使用することで、リークを防ぎ、ボット検出を減らすことで達成できる。この目的のためによく使われるツールがいくつかある:
- SeleniumBase: Selenium のボット検出を回避するステルス機能を内蔵した Python ベースの自動化フレームワーク。
- Playwright Stealth:ボット対策システムによる検出を回避するためにブラウザの設定を変更するPlaywright Extraプラグイン。
- Puppeteer Stealth:Puppeteer Extraプラグインは、ブラウザのフィンガープリントを修正して、より人間らしく見せる。
chromedriver-not-detected
: アンチボット機構による検出を回避するためのパッチを適用したSelenium WebDriver。
このセクションでは、Pythonと完璧に動作するSeleniumBaseに焦点を当てます。しかし、他のオプションも簡単に使うことができます。
SeleniumBaseをインストールするには、以下のコマンドを実行してください:
pip install seleniumbase
上記のSeleniumスクリプトを以下のように修正してSeleniumBaseを使うことができます:
from seleniumbase import Driver
# Initialize the SeleniumBase driver
driver = Driver(uc=True) # Enables stealth mode
# Connect to the target Amazon page
driver.get("https://www.amazon.com/Amazon-Kindle/dp/B0CNV9F72P")
# Take a screenshot of the entire page
driver.save_screenshot("product-page.png")
# Additional scraping logic...
# Release the driver resources
driver.quit()
素晴らしい!アマゾンのCAPTCHAを見つける確率が大幅に減った。
アプローチ2:AIで解決する
アマゾンのCAPTCHAのコレクションを見れば、AIがそれを解く能力がないとは考えにくい:
結局のところ、基本的なテキスト認識の課題は、今日市場に出回っているより高度で複雑なCAPTCHAと比べると、時代遅れのように思える:
つまり、ここでのアイデアはこうだ:
- CAPTCHAページのスクリーンショットを撮る。
- ChatGPTまたは他のAIモデルへの給餌
- AIから答えをもらい、それを使ってCAPTCHAを解く。
CAPTCHAのHTMLを調べてみると、テキスト入力フィールドはCSSセレクタの.a-span12で
選択できることがわかる。この情報から、以下の方法でAIを使ってアマゾンのCAPTCHAを回避することができる:
import os
import time
import base64
from openai import OpenAI
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
def solve_amazon_captcha(driver, timeout=5):
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
captcha_elements = driver.find_elements(By.CSS_SELECTOR, "a-span12")
# If the CAPTCHA has been detected
if len(captcha_elements) > 0:
print("CAPTCHA detected!")
# Take a screenshot of the CAPTCHA page
driver.maximize_window()
screenshot_path = "captcha.png"
driver.save_screenshot(screenshot_path)
print("Attempting to solve the CAPTCHA...")
# Feed the screenshot to the AI for CAPTCHA solving
base64_image = encode_image(screenshot_path)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Extract the text from this CAPTCHA. Return only the text."},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}},
],
}
],
)
# Get the CAPTCHA text
captcha_text = response.choices[0].message.content.strip()
# Select teh CAPTCHA input text and fill it out
# with the AI generated text
input_element = captcha_elements[0]
input_element.send_keys(captcha_text, Keys.ENTER)
print("CAPTCHA solved!")
print(f"Wait up to {timeout} seconds for page reload...")
# Wait up to 5 seconds for a page reload
time.sleep(timeout)
solve_amazon_captcha()
関数を動作させるには、openai
依存関係をインストールしてください:
pip install openai
さらに、OpenAI API キーをOPENAI_API_KEY
というグローバル環境変数に設定します。
このように、AIによるCAPTCHA解決機能を呼び出すことができる:
driver = webdriver.Chrome()
driver.get("https://www.amazon.com/Amazon-Kindle/dp/B0CNV9F72P")
solve_amazon_captcha(driver)
driver.quit()
これで、あなたのスクリプトは、人間のユーザーと同じようにCAPTCHAを解決します。
Geminiを使った同様のアプローチについては、GitHubのGenaptchaプロジェクトをチェックしよう。
方法その3:CAPTCHAソルバーを組み込む
最大限の精度を達成し、同時にAIモデルへの呼び出しを最小限に抑えるには(画像によるトークン消費でコストがかかる)、上記の2つのソリューションを組み合わせる必要がある:
- アマゾンでCAPTCHAの頻度を減らす
- 出現したときだけ解く
しかし、ハイブリッド・アプローチは独自の課題をもたらす:
- その他の依存関係:ステルスブラウザ自動化ツール、OpenAIクライアント、適切な環境設定が必要です。
- 不安定性:ステルス・プラグインは、ボット開発者とボット対策ソリューションの間の継続的な戦いのために、今日は機能しても明日は効果がないかもしれません。このため、ライブラリを最新の状態に保つことが不可欠です。さらに、LLMモデルは一貫性のない結果を出すことがあり、これが新たな問題を引き起こすこともある。さらに、AIはより複雑なCAPTCHAを解くのが難しい。
- 再試行ロジックが必要: CAPTCHAが実際に解決されることを保証するために、AIが失敗した場合の再試行メカニズムを実装する必要があります。
- 遅さ:AIは処理に大幅な遅れをもたらす。加えて、CAPTCHAが表示されたり消えたりするのを待つと、自動化/スクレイピング・プロセスがさらに遅くなる。
- メンテナンスのオーバーヘッド:選択したすべてのテクノロジーが正しく設定され、長期にわたって機能し続けることを保証する責任があります。
CAPTCHAソルバーを使う方が簡単ではありませんか?もちろん、この機能がお好みのブラウザ自動化ツールによって制御されるヘッドレスブラウザに直接統合されている場合は特にそうです。
これこそが、Scraping Browserが提供する体験です。ウェブスクレイピングに最適化されたクラウドベースのブラウザで、最大限のパフォーマンスを提供し、インフラ管理の必要性を排除するように設計されています。この特別なブラウザは、IPローテーション、自動再試行、高度なボット回避メカニズム、そしてもちろんCAPTCHAを解決する機能を備えています。
他のブラウザのようにSelenium、Playwright、Puppeteerと簡単に統合する方法は、ドキュメントをご覧ください。
アマゾンのCAPTCHAを解読する最良の方法
本記事で取り上げたアマゾンのCAPTCHAテクニックのまとめである:
アプローチ | キャプチャをスキップする | CAPTCHAの解決 | メンテナンス | マニュアル・ロジック | コスト |
---|---|---|---|---|---|
隠しブラウザ | ✔️ | ❌ | 必須 | 必須 | 無料 |
AIソリューション | ❌ | ✔️ | 必須 | 必須 | 💲 |
キャプチャ・ソルバー | ✔️ | ✔️ | このソリューションはクラウド上で実行されるため、その必要はない。 | すべての機能がツールに統合されているので、その必要はない。 | 💲 |
その長所と短所を以下にまとめる。
方法その1:隠しブラウザを使う
👍プロ:
- フリー&オープンソース
👎 短所:
- 回避ではなく、CAPTCHA回避
- パッチが適用されたブラウザに依存しており、不安定である可能性がある。
- 継続的なメンテナンスが必要
アプローチ2:AIで解決する
👍プロ:
- テキストベースのCAPTCHAを効果的に解決できる
👎 短所:
- 複雑なCAPTCHAに対して一貫性がなく、効果的な結果が得られない。
- ページ上でCAPTCHAを検出するのは難しい
- AIコールにはコストがかかる
方法その3:CAPTCHAソルバーを組み込む
👍プロ:
- 非常に効果的
- ブラウザ自動化ツールやHTTPクライアントとシームレスに連携
- リトライ・ロジックやブラウザの設定、その他の手作業は必要ありません。
👎 短所:
- プレミアム・サービス
結論
このブログポストでは、AmazonがCAPTCHAであなたを止めるかもしれない理由と、スクレイピングスクリプトでそれを処理する方法を学んだ。残念なことに、CAPTCHAの外観は一貫性がないため、研究が難しい。幸いなことに、CAPTCHAを回避したり迂回したりするためのテクニックがいくつかあり、ここでは最も有用な3つのテクニックを紹介する。
上述したように、最も効果的なアプローチは、Bright Dataのスクレイピング・ブラウザを使用することです。このブラウザにはCAPTCHAソルバーが内蔵されており、Selenium、Playwright、Puppeteerとシームレスに統合されています。
さらにシンプルなソリューションをお探しの場合は、他のオプションもご検討ください:
- Amazon CAPTCHA Solver:Web UnlockerがサポートするAmazon専用のCAPTCHA Solverです。
- Amazon Scraper: Amazonページ専用に設計されたスクレイピング・エンドポイント。呼び出すだけで、必要なデータを好きなフォーマットでパース済みで取得できる。
- Amazon Datasets: すぐに使えるデータセット。スクレイピングは不要です。
今すぐBright Dataの無料アカウントを作成し、無料トライアルでスクレイピングとデータセットソリューションをお試しください。
クレジットカードは必要ありません