CapSolver APIを使ったブラウザでのCAPTCHA解決方法

Sora Fujimoto
AI Solutions Architect
04-Sep-2025

Browser-useは、AIエージェントがWebブラウザを制御して、データスクレイピング、フォーム入力、反復的なオンラインアクティビティなどのタスクを自動化できるようにする、強力なオープンソースのPythonライブラリです。Playwrightによるブラウザ自動化と、OpenAIのGPTモデルなどの大規模言語モデル(LLM)との統合により、Browser-useは自然言語コマンドの発行を可能にし、広範なコーディングスキルを持たないユーザーでもアクセスしやすくなっています。ただし、Web自動化における一般的な課題として、CAPTCHAがあります。CAPTCHAは自動化されたスクリプトをブロックするように設計されており、Browser-useのワークフローを中断する可能性があります。
CapSolverは、reCAPTCHAやCloudflare Turnstileなど、さまざまなタイプのCAPTCHAを解決することに特化したAI搭載サービスです。CapSolverをBrowser-useと統合することで、CAPTCHAを解決するために手動で介入する必要なく、自動化タスクを円滑に進めることができます。
この記事では、CapSolverをBrowser-useと統合してCAPTCHAを効果的に処理する方法をステップバイステップで説明します。必要な設定、完全なコード例、開始に役立つベストプラクティスについて説明します。
Browser-useの概要とユースケース
Browser-useは、AIエージェントが自然言語による指示でWebサイトと対話できるようにすることで、Web自動化を簡素化するPythonライブラリです。内部的にはPlaywrightを使用してChromium、Firefox、WebKitなどのブラウザを制御し、LLMと統合してユーザーコマンドを解釈および実行します。これにより、Browser-useは、広範なコード記述なしに複雑なタスクを自動化するために最適です。
ユースケース
Browser-useは、以下を含むさまざまな自動化タスクをサポートしています。
- データスクレイピング: 市場調査、価格監視、コンテンツ集約のためにWebサイトからデータ抽出します。
- フォーム入力: 応募書類やアカウント登録など、さまざまなソースからのデータを使用してオンラインフォームの入力を自動化します。
- タスク自動化: アカウントへのログイン、Webサイトのナビゲーション、ボタンのクリックなどの反復的なタスクを実行します。
これらのタスクには、自動アクセスを防ぐためにCAPTCHAを展開するWebサイトとのやり取りが含まれることが多く、中断のない自動化には信頼できるCAPTCHA解決ソリューションが不可欠です。
CAPTCHA解決が必要な理由
Webサイトは、自動アクセス、スパム、悪意のあるアクティビティをブロックするために、CAPTCHAなどのボット対策を展開することがよくあります。チェックボックスをクリックしたり、画像パズルを解いたりするなどの課題で人間とボットを区別するように設計されたこれらのCAPTCHAは、Webスクレイピングにとって大きな障害となります。Browser-useでタスクを自動化する場合、CAPTCHAに遭遇するとプロセスが完全に停止し、手動で介入せずに目的のデータをスクレイピングすることができなくなります。
一般的なCAPTCHAの種類には以下が含まれます。
| CAPTCHAの種類 | 説明 |
|---|---|
| reCAPTCHA v2 | ユーザーは、プロンプトに基づいてボックスをチェックしたり、画像を選択したりする必要があります。 |
| reCAPTCHA v3 | ユーザーの行動を評価するスコアリングシステムを使用し、多くの場合、ユーザーには表示されません。 |
| Cloudflare Turnstile | ユーザーの操作を最小限に抑えたプライバシー重視のCAPTCHA代替手段です。 |
Webスクレイピングの場合、これは重要な問題です。CAPTCHAは、Browser-useがWebサイトからデータを抽出するために依存する自動化を阻止するために特別に設計されています。これらの障壁を回避する方法がないと、スクレイピングの努力は停滞し、自動化が無効になります。幸いなことに、CapSolverのAPIをBrowser-useと統合することで、強力なソリューションが提供されます。CapSolverはこれらのCAPTCHAを自動的に解決するため、Browser-useはボット対策を回避し、中断することなくデータを正常にスクレイピングできます。reCAPTCHA v2やCloudflare Turnstileの処理など、CapSolverは幅広いCAPTCHAの課題に対処できるため、保護されたWebサイトからのシームレスで効率的なデータ抽出に不可欠なツールになります。
この統合は、CAPTCHAを使用するサイトからデータをスクレイピングしようとしているユーザーにとって画期的なものであり、手動入力の必要性を排除し、Webスクレイピングプロセスを円滑に実行し続けます。
CapSolverを使用してCAPTCHAを処理する方法
CapSolverは、高度なAIアルゴリズムを使用してさまざまなCAPTCHAを解決できるAPIを提供しています。CapSolverをBrowser-useと統合するには、@controller.actionデコレータを使用してカスタムアクションを定義できます。このアクションは、Webページ上のCAPTCHAを検出し、必要な情報(例:reCAPTCHAのサイトキー)を抽出し、CapSolverのAPIを呼び出してソリューションを取得し、ソリューションをページに挿入します。
CapSolverをBrowser-useと統合する手順
- CapSolverにサインアップする: CapSolverでアカウントを作成し、資金を追加してAPIキーを取得します。
- Browser-useを設定する: Browser-useとその依存関係をインストールし、LLMプロバイダー(例:OpenAI)のAPIキーを使用して環境を構成します。
- 依存関係をインストールする: Pythonを使用して、必要なパッケージ(
browser-use、playwright、requests)をインストールします。 - カスタムアクションを定義する: CapSolverのAPIを使用してCAPTCHAを処理するカスタムアクションをBrowser-useスクリプトに作成します。
- エージェントを実行する: タスクの実行中にCAPTCHAが発生した場合に、AIエージェントがカスタムアクションを呼び出すように指示します。
主要なコードスニペット
以下は、CapSolverのAPIを使用してreCAPTCHA v2を解決するカスタムアクションの例です。
python
import requests
import time
from browser_use import Controller, ActionResult
from playwright.async_api import Page
CAPSOLVER_API_KEY = 'YOUR_CAPSOLVER_API_KEY'
@controller.action('Solve CAPTCHA', domains=['*'])
async def solve_captcha(page: Page) -> ActionResult:
if await page.query_selector('.g-recaptcha'):
site_key = await page.evaluate("document.querySelector('.g-recaptcha').getAttribute('data-sitekey')")
page_url = page.url
# CapSolverでタスクを作成する
response = requests.post('https://api.capsolver.com/createTask', json={
'clientKey': CAPSOLVER_API_KEY,
'task': {
'type': 'ReCaptchaV2TaskProxyLess',
'websiteURL': page_url,
'websiteKey': site_key,
}
})
task_id = response.json().get('taskId')
if not task_id:
return ActionResult(success=False, message='Failed to create CapSolver task')
# 解決策をポーリングする
while True:
time.sleep(5)
result_response = requests.post('https://api.capsolver.com/getTaskResult', json={
'clientKey': CAPSOLVER_API_KEY,
'taskId': task_id
})
result = result_response.json()
if result.get('status') == 'ready':
solution = result.get('solution', {}).get('gRecaptchaResponse')
if solution:
await page.evaluate(f"document.getElementById('g-recaptcha-response').innerHTML = '{solution}';")
return ActionResult(success=True, message='CAPTCHA solved')
else:
return ActionResult(success=False, message='No solution found')
elif result.get('status') == 'failed':
return ActionResult(success=False, message='CapSolver failed to solve CAPTCHA')
return ActionResult(success=False, message='No CAPTCHA found')
このスニペットは、reCAPTCHA v2要素をチェックし、サイトキーを抽出し、CapSolverでタスクを作成し、ソリューションをポーリングし、トークンをページに挿入するカスタムアクションを定義しています。
完全なコード例+ステップバイステップの説明
以下は、CapSolverをBrowser-useと統合してCAPTCHAを解決する方法を示す完全なコード例です。
事前条件
必要なパッケージがインストールされていることを確認してください。
bash
pip install browser-use playwright requests
playwright install
必要なAPIキーを使用して環境を設定します。OpenAIとCapSolverのAPIキーを含む.envファイルを作成します。
env
OPENAI_API_KEY=your_openai_api_key
CAPSOLVER_API_KEY=your_capsolver_api_key
完全なコード例
以下の内容を含むPythonスクリプトを作成します。
python
import os
import asyncio
import requests
from dotenv import load_dotenv
from browser_use import Agent, Controller, ActionResult
from browser_use.browser import BrowserSession
from browser_use.llm import ChatOpenAI
from playwright.async_api import Page
# .envファイルから環境変数をロードする
load_dotenv()
CAPSOLVER_API_KEY = os.getenv('CAPSOLVER_API_KEY')
controller = Controller()
@controller.action('Solve CAPTCHA', domains=['*'])
async def solve_captcha(page) -> ActionResult:
if await page.query_selector('.g-recaptcha'):
site_key = await page.evaluate("document.querySelector('.g-recaptcha').getAttribute('data-sitekey')")
page_url = page.url
response = requests.post('https://api.capsolver.com/createTask', json={
'clientKey': CAPSOLVER_API_KEY,
'task': {
'type': 'ReCaptchaV2TaskProxyLess',
'websiteURL': page_url,
'websiteKey': site_key,
}
})
task_id = response.json().get('taskId')
print(task_id)
if not task_id:
return ActionResult(success=False, message='Failed to create CapSolver task')
while True:
await asyncio.sleep(5)
result_response = requests.post('https://api.capsolver.com/getTaskResult', json={
'clientKey': CAPSOLVER_API_KEY,
'taskId': task_id
})
result = result_response.json()
print(f"CAPTCHA result status: {result.get('status')}")
if result.get('status') == 'ready':
solution = result.get('solution', {}).get('gRecaptchaResponse')
print(f"CAPTCHA solution: {solution}")
if solution:
print("Submitting CAPTCHA solution...")
# Try both possible input fields for the CAPTCHA token
await page.evaluate(f"""
// Try the standard g-recaptcha-response field
var gRecaptchaResponse = document.getElementById('g-recaptcha-response');
if (gRecaptchaResponse) {{
gRecaptchaResponse.innerHTML = '{solution}';
var event = new Event('input', {{ bubbles: true }});
gRecaptchaResponse.dispatchEvent(event);
}}
// Also try the recaptcha-token field
var recaptchaToken = document.getElementById('recaptcha-token');
if (recaptchaToken) {{
recaptchaToken.value = '{solution}';
var event = new Event('input', {{ bubbles: true }});
recaptchaToken.dispatchEvent(event);
}}
""")
# Wait a moment for the token to be processed
await asyncio.sleep(2)
print("Token injected successfully! CAPTCHA solved.")
# Method 2: Click submit button directly using the correct selector
print("Now clicking submit button...")
try:
# Use the specific button selector you provided
submit_button = await page.query_selector("body > main > form > fieldset > button")
if submit_button:
await submit_button.click()
print("✅ Submit button clicked successfully!")
else:
print("❌ Submit button not found!")
return ActionResult(success=False, message='Submit button not found')
except Exception as e:
print(f"❌ Error clicking submit button: {e}")
return ActionResult(success=False, message=f'Error clicking submit: {e}')
print("CAPTCHA solved and form submitted successfully!")
return ActionResult(success=True, message='CAPTCHA solved and form submitted')
else:
return ActionResult(success=False, message='No solution found')
elif result.get('status') == 'failed':
return ActionResult(success=False, message='CapSolver failed to solve CAPTCHA')
return ActionResult(success=False, message='No CAPTCHA found')
llm = ChatOpenAI(model="gpt-4o-mini")
async def main():
try:
print("🚀 Starting browser-use CAPTCHA solver agent...")
# Simple task instruction for CAPTCHA solving and form submission
task = """Navigate to https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php and solve the CAPTCHA, then submit the form.
STEP 1: Navigate to the reCAPTCHA demo page: https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
STEP 2: Wait for the page to fully load. You should see a form with input fields and a reCAPTCHA checkbox.
STEP 3: Look for a reCAPTCHA element (usually a checkbox that says "I'm not a robot" or similar).
STEP 4: Use the "solve_captcha" action to automatically solve the CAPTCHA and submit the form.
STEP 5: Report the final result.
Note: The solve_captcha action will handle both solving the CAPTCHA and submitting the form automatically."""
# Create browser session first
browser_session = BrowserSession()
# Create agent with the browser session
agent = Agent(
task=task,
llm=llm,
controller=controller,
browser_session=browser_session
)
print("📱 Running CAPTCHA solver agent...")
result = await agent.run()
print(f"✅ Agent completed: {result}")
# Keep browser open to see results
input('Press Enter to close the browser...')
await browser_session.close()
except Exception as e:
print(f"❌ Error: {e}")
if __name__ == "__main__":
asyncio.run(main())
ステップバイステップの説明
| ステップ | 説明 |
|---|
- 依存関係のインストール |
pip install browser-use playwright requestsを使用してbrowser-use、playwright、requestsをインストールします。必要なブラウザをインストールするにはplaywright installを実行します。| - 環境の設定 | OpenAIとCapSolverのAPIキーを安全に保存するために
.envファイルを作成します。| - カスタムアクションの定義 | reCAPTCHA v2要素を確認し、サイトキーを抽出し、CapSolverのAPIを呼び出し、ソリューションをページに挿入する
solve_captchaを定義するために@controller.actionデコレータを使用します。| - コントローラーとエージェントの初期化 |
Controllerインスタンスを作成し、カスタムアクションを定義し、LLM(例:GPT-4o-miniを使用したChatOpenAI)を初期化し、コントローラーを使用してBrowserUseエージェントを作成します。| - エージェントの実行 | 遭遇した場合にカスタムアクションを使用してCAPTCHAを解決する指示を含むタスクを提供します。エージェントは指定されたURLに移動し、CAPTCHAを検出し、カスタムアクションを呼び出し、フォームを送信します。|
- エラー処理 | カスタムアクションには、CapSolverタスクが失敗した場合やソリューションが見つからない場合のエラー処理が含まれており、適切な
ActionResultオブジェクトを返します。| - クリーンアップ | エージェントはタスクが完了するとブラウザのリソースを自動的に管理し、ブラウザを閉じます。|
この例はreCAPTCHA v2に焦点を当てていますが、タスクタイプを変更することで(例:Turnstileの場合はAntiTurnstileTaskProxyLess)、他のCAPTCHAタイプにも適応できます。
デモのチュートリアル
このセクションでは、reCAPTCHA v2チェックボックスを含むデモページに移動してフォームを送信するサンプルタスクを使用して、統合の仕組みについて説明します。
- タスクの設定: タスクはAIエージェントに
https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.phpにアクセスし、フォームを送信し、solve_captchaアクションを使用してCAPTCHAを解決するよう指示します。 - エージェントの実行: Browser-useエージェントはPlaywrightで制御されるブラウザを起動し、指定されたURLに移動します。
- CAPTCHAの検出: エージェントは
.g-recaptcha要素を検索することでCAPTCHAを確認します。見つかった場合は、solve_captchaアクションがトリガーされます。 - カスタムアクションの実行:
solve_captchaアクションはサイトキーとページURLを抽出し、CapSolverのAPIでタスクを作成し、ソリューションをポーリングします。 - ソリューションの挿入: ソリューションを受信すると、アクションはトークンを
g-recaptcha-responseフィールドに挿入します。 - フォームの送信: エージェントは送信ボタンをクリックすることでフォームを送信し、タスクを完了します。
- タスクの完了: エージェントはフォームの送信が成功したことを示す結果を返します。
視覚的には、ブラウザがデモページに移動し、ソリューションが挿入された後、reCAPTCHAチェックボックスが自動的にマークされ、フォームが正常に送信されるのがわかります。
FAQ セクション
| 質問 | 回答 |
|---|---|
| CapSolverは何種類のCAPTCHAを解決できますか? | CapSolverはreCAPTCHA v2/v3、Cloudflare Turnstileなどをサポートしています。完全なリストについては、CapSolverのドキュメントを参照してください。 |
| 異なるCAPTCHAタイプをどのように処理しますか? | カスタムアクションを変更してCAPTCHAタイプを検出し(例:特定の要素または属性を確認)、AntiTurnstileTaskProxyLess(Turnstileの場合)など、適切なCapSolverタスクタイプを使用します。 |
| CapSolverがCAPTCHAを解決できない場合はどうなりますか? | カスタムアクションに再試行ロジックを実装するか、ユーザーに失敗を通知します。デバッグのためにエラーをログに記録し、フォールバック戦略を検討してください。 |
| CapSolverを他の自動化ツールで使用できますか? | はい、CapSolverのAPIはSelenium、Puppeteer、Playwrightなど、HTTPリクエストをサポートするツールと互換性があります。 |
| CapSolverでプロキシは必要ですか? | 地域固有のCAPTCHAまたはIPバインドされたCAPTCHAにはプロキシが必要になる場合があります。CapSolverはプロキシの使用をサポートしています。詳細については、ドキュメントを参照してください。 |
まとめ
Browser-useにCapSolverを統合することで、Web自動化タスクでCAPTCHAを処理するための堅牢なソリューションが提供されます。CAPTCHAを解決するためのカスタムアクションを定義することで、AIエージェントが、ボット対策に直面した場合でも、Webサイトをシームレスに移動できるようにします。この組み合わせにより、Browser-useの使いやすさとCapSolverの強力なCAPTCHA解決機能を活用して、効率的な自動化ワークフローを作成できます。
開始するには、CapSolverにサインアップし、Browser-useをご覧ください。セットアップ手順に従い、提供されているコード例を実装します。詳細については、CapSolverのドキュメントとBrowser-useのドキュメントをご覧ください。次の自動化プロジェクトでこの統合を試して、CAPTCHAを自動的に解決する容易さを体験してください!
Browser-useユーザー向けのボーナス:CapSolverアカウントを再チャージする際にプロモーションコードBROWSERUSEを使用すると、上限なし、有効期限なしの独占的な6%のボーナスクレジットを受け取ることができます。
サポートされているブラウザとツール
- Browser-use: Playwrightを使用し、Chromium、Firefox、WebKitブラウザをサポートしています。
- CapSolver: ChromeとFirefoxのブラウザ拡張機能を含む、HTTP対応クライアントと互換性があります。
詳細情報とその他のフレームワークの調査
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る

AWSのCaptcha/チャレンジをPHPで解決する方法: 包括的なガイド
AWS WAF CAPTCHAおよびチャレンジを解決するための詳細なPHPガイド:信頼性のあるスクリーピングと自動化のために

Sora Fujimoto
10-Dec-2025

ウェブクローリング vs. ウェブスクラッピング:本質的な違い
WebクローリングとWebスクラピングの本質的な違いを解明しましょう。それぞれの異なる目的と、10の強力なユースケース、そしてCapSolverがAWS WAFやCAPTCHAブロックを回避し、スムーズなデータ収集を実現する方法について学びましょう。

Emma Foster
09-Dec-2025

GoProxy: 信頼できるプロキシーサービスプロバイダー 9000万以上の最速IPネットワークを備えた
本記事では、goproxyとは何か、および彼らが提供するサービスについてご紹介します。

Aloísio Vítor
09-Dec-2025

Pythonでリカプチャ v2を解く方法
本記事では、Pythonを使用してreCaptcha v2を解決する方法を紹介します。

Sora Fujimoto
09-Dec-2025

2026年におけるWebスクレイピング時のCloudflareの解決方法 | ステップバイステップガイド
このブログ記事では、CapSolverというCAPTCHAを解決するのに熟練したツールを活用して、これらの防御を突破するための効果的な技術について詳しく解説します。Cloudflareのセキュリティプロトコルの説明から、これらの制限を回避するための実用的な戦略やコードサンプルの提供に至るまで、詳しく解説します。

Sora Fujimoto
09-Dec-2025

Undetectable.io: なぜこの検出防止ブラウザが市場を席巻しているのか?
本記事では、Undetectable.ioとは何か、および提供するサービスについてご紹介します。

Ethan Collins
09-Dec-2025

