
Sora Fujimoto
AI Solutions Architect

reCAPTCHAは、ウェブをブラウジングする際によく遭遇する検証チャレンジです。LangChainエージェントがデータ収集、フォーム送信、マルチステップワークフローを実行する際、ログインページ、検索結果、保護されたコンテンツでreCAPTCHA v2のチェックボックスや非表示のチャレンジに遭遇します。このチュートリアルでは、CapSolverのcapsolver-agentパッケージを使用してLangChainでreCAPTCHA v2を解決する方法を具体的に説明し、トークンモードとブラウザモードの完全なコード例を提供します。
capsolver-agentパッケージは、LangChainのReActエージェント用のネイティブなBaseTool実装を提供しますreCAPTCHA v2は、数百万のウェブサイトで自動トラフィックと人間ユーザーを区別するために導入されています。LangChainエージェントが保護されたページにナビゲートするとき、リードの拡張、データ抽出、ワークフローの自動化のためにGoogleのリスク分析エンジンがセッションを評価します。自動ブラウザ、ヘッドレス環境、高速なナビゲーションパターンはreCAPTCHAチャレンジをトリガーし、エージェントの実行を停止します。
チャレンジは2つの形式で現れます:「I'm not a robot」の可視チェックボックスと、リスクスコアに基づいて静かにトリガーされる非表示バージョンです。どちらの形式でも、進むには有効なトークンの送信が必要です。解決メカニズムがない場合、LangChainエージェントはタスクを継続できず、全体のチェーンが失敗します。
GoogleのreCAPTCHAドキュメントは、ブラウザ環境のチェック、インタラクションパターン、および歴史的な行動を含む高度なリスク分析を使用していることを確認しています。これは、人間のようなブラウジングパターンを持たない自動エージェントにとって特に困難です。
CapSolverのAI駆動の解決サービスは、クラウドインフラストラクチャを通じて有効なトークンを生成することで、エージェントのコンテキスト内でピクセル単位のインタラクションや画像認識の必要性を回避します。
必要なパッケージをインストールします:
# コアエンジン(必須の依存関係)
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# LangChainサポート付きエージェントツール
pip install "capsolver-agent[langchain] @ git+https://github.com/capsolver-ai/capsolver-agent.git"
# LangChainランタイム
pip install langchain-openai langgraph
環境変数を設定します:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
また、ターゲットページからのreCAPTCHAサイトキーが必要です。CapSolverブラウザ拡張機能を使用して確認するか、ページソースのdata-sitekey属性を検査してください。reCAPTCHAの識別ガイドでは、v2チェックボックス、v2非表示、v3バージョンの区別の仕方を説明しています。
ターゲットページのreCAPTCHAサイトキーを確認してください。ブラウザの開発者ツールを開き、ページソースを検索します:
<!-- 可視reCAPTCHA v2(チェックボックス) -->
<div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
<!-- 非表示reCAPTCHA v2 -->
<div class="g-recaptcha" data-sitekey="6LeIxAcT..." data-size="invisible"></div>
3つの値を記録してください: data-sitekey、完全なページURL、およびそれが表示されるか非表示か(data-size="invisible"をチェックしてください)。
CapSolver SDKを使用してプログラム的に検出するには:
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
async def detect_recaptcha(url: str):
cap = create_capsolver(api_key="YOUR_API_KEY")
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto(url)
# ページ上のすべてのCAPTCHAsを自動検出
infos = await cap.get_captcha_info(page)
for info in infos:
print(f"Type: {info.type}, Key: {info.website_key}")
await browser.close()
await cap.aclose()
サイトキーはreCAPTCHA解決の基本パラメータです。これがないと、解決サービスは特定のサイト用の有効なトークンを生成できません。同じドメイン内の異なるページでは異なるサイトキーを使用する可能性があるため、常にページごとに確認してください。
6LeIxAcT...)を提供しており、常に通過します。実際のサイトでは、実際に解決が必要なユニークなキーを使用します。page_actionが必要です。スクリプトのソースを確認してください - v3は?render=SITE_KEYではなくdiv要素から読み込まれます。capsolver-agent LangChainツールを使用して、エージェントのワークフロー内でreCAPTCHA v2を解決します:
import asyncio
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from capsolver_agent.langchain import get_langchain_tools
async def solve_recaptcha_with_agent():
# CapSolver LangChainツールを取得
tools = get_langchain_tools(api_key="YOUR_CAPSOLVER_API_KEY")
# ReActエージェントを作成
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, tools=tools)
# エージェントにreCAPTCHAを解決するよう依頼
result = await agent.ainvoke({
"messages": [("user",
"https://example.com/loginでreCAPTCHA v2を解決してください。"
"サイトキーは6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhIです。"
"フォームを送信できるトークンを返してください。"
)]
})
print(result["messages"][-1].content)
asyncio.run(solve_recaptcha_with_agent())
エージェントループなしで直接実行する場合(プログラム的なコントロールが必要な場合):
from capsolver_agent.schema import create_executor
async def solve_recaptcha_direct():
executor = create_executor(api_key="YOUR_CAPSOLVER_API_KEY")
result = await executor.execute("solve_captcha", {
"captcha_type": "reCaptchaV2",
"website_url": "https://example.com/login",
"website_key": "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
})
if result["success"]:
token = result["solution"]["token"]
print(f"reCAPTCHAが解決しました!トークン: {token[:60]}...")
# フォームPOSTでこのトークンを'g-recaptcha-response'として送信
return token
else:
print(f"失敗: {result['error']}")
return None
返されたトークンは、フォームPOSTリクエストのg-recaptcha-responseフィールドとして送信する必要があります。reCAPTCHA v2の解決ドキュメントでは、トークン送信パターンの追加情報が提供されています。
トークンモードはreCAPTCHA v2の最速アプローチです - ブラウザのオーバーヘッドなしで平均5〜12秒で解決できます。既にターゲットサイトのパラメータを知っているLangChainエージェントには、ブラウザインスタンスを起動することなく即座にCAPTCHAをクリアする方法を提供します。
非表示reCAPTCHA v2はAPIの観点から同じです - 同じreCaptchaV2タスクタイプが両方のバージョンを処理します:
# 非表示reCAPTCHA v2 — 同じAPIコール
result = await executor.execute("solve_captcha", {
"captcha_type": "reCaptchaV2",
"website_url": "https://example.com/checkout",
"website_key": "6Ld_SITE_KEY_HERE"
# 他のフラグは必要ありません — CapSolverは自動的に非表示を処理します
})
違いはトークンの挿入方法です。非表示reCAPTCHAは通常、ボタンクリックまたはフォーム送信イベントにバインドされます。トークンを取得した後、コールバックをトリガーします:
# 解決後のPlaywright/ブラウザコンテキストで
await page.evaluate(f"""() => {{
document.getElementById('g-recaptcha-response').innerHTML = '{token}';
// バインドされたコールバックをトリガー
if (typeof ___grecaptcha_cfg !== 'undefined') {{
const clients = ___grecaptcha_cfg.clients;
for (const key in clients) {{
const client = clients[key];
// コールバックを検索して呼び出す
if (client && client.L && client.L.L && client.L.L.callback) {{
client.L.L.callback('{token}');
}}
}}
}}
}}""")
reCAPTCHAコールバックの識別ガイドでは、任意のサイトで正しいコールバック関数を見つける方法が説明されています。
LangChainエージェントがブラウザを駆動し、動的にreCAPTCHAに遭遇する場合、solve_on_page()を使用して自動検出と埋め込みを行います:
import asyncio
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
async def auto_solve_recaptcha(target_url: str):
"""任意のページでreCAPTCHAを自動検出および解決します。"""
cap = create_capsolver(api_key="YOUR_CAPSOLVER_API_KEY")
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto(target_url)
await page.wait_for_load_state("networkidle")
# 1つの呼び出しだけですべてを処理: 検出 → 解決 → 埋め込み
results = await cap.solve_on_page(page)
for r in results:
if r.solution:
print(f"解決済み {r.info.type}: token={r.solution.token[:50]}...")
print(f"トークンがページに埋め込まれました: {r.filled}")
else:
print(f"{r.info.type}の解決に失敗しました: {r.error}")
# 解決後、ページは準備完了です — フォームを送信
submit_button = page.locator('button[type="submit"]')
if await submit_button.count() > 0:
await submit_button.click()
await page.wait_for_navigation()
print(f"フォームが送信されました。現在のURL: {page.url}")
await browser.close()
await cap.aclose()
asyncio.run(auto_solve_recaptcha("https://example.com/login"))
ブラウザモードは特に強力で、ライブDOMからreCAPTCHAパラメータを直接読み込みます — 手動でのサイトキー抽出は必要ありません。SDKはCAPTCHAタイプを識別し、data-sitekeyを読み込み、解決し、g-recaptcha-responseテキストエリアにトークンを自動的に書き込みます。
ボーナスコードを取得してください: CapSolverダッシュボードでコードWEBSを使用すると、すべての充電で追加の5%ボーナスを獲得できます。LangChain開発者にとって理想的です。reCAPTCHAチャレンジを処理するエージェントを構築する際におすすめです。
reCAPTCHA解決を他のツールと組み合わせて、完全な本番ワークフローを構築します:
import asyncio
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from capsolver_agent.langchain import get_langchain_tools
async def production_agent():
capsolver_tools = get_langchain_tools(api_key="YOUR_CAPSOLVER_API_KEY")
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, tools=capsolver_tools)
# reCAPTCHA解決を必要とするマルチステップタスク
result = await agent.ainvoke({
"messages": [("user",
"保護されたリソースにアクセスする必要があります。"
"まず、https://example.com/gateのreCAPTCHA v2を解決してください(サイトキー: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI),"
"その後、私のリクエストを進めるためにトークンを教えてください。"
)]
})
return result["messages"][-1].content
asyncio.run(production_agent())
複数のreCAPTCHAバージョンを異なるサイトで処理するエージェントの場合、同じツールはv2とv3の両方を処理します - captcha_typeパラメータをreCaptchaV2からreCaptchaV3に変更するだけです。
CapSolver製品ページでは、すべてのサポートされているCAPTCHAタイプとその料金がリストアップされており、LangChainエージェントの展開に必要なコストを推定するのに役立ちます。
LangChainでreCAPTCHAを解決するには、LangChainのエクストラを含むcapsolver-agentパッケージが必要です。これは、ネイティブなBaseTool実装を提供します。トークンモードはブラウザなしで既知のサイトキーを5〜12秒で処理し、ブラウザモードは任意のページでreCAPTCHAトークンを自動検出および埋め込みます。CapSolverは、reCAPTCHA v2チェックボックスおよび非表示バージョンを統一されたインターフェースでサポートするAI解決インフラを提供します。
ターゲットページのサイトキーを確認し、get_langchain_tools()をReActエージェントに統合してください。エージェントの推論ループは自然にreCAPTCHA解決を呼び出すため、検証処理は自動化ワークフローの透明な一部になります。
CapSolverはreCAPTCHA v2チャレンジで95〜99%の成功率を達成しています。AI駆動の解決サービスはチェックボックスと非表示バージョンの両方を処理します。失敗した試行は料金が発生せず、構造化されたエラー応答によりエージェントが自動的に再試行できます。
reCAPTCHA v2の平均解決時間は5〜12秒です。これはCapSolverのサービスへのネットワーク往復時間とAI認識プロセスを含みます。時間に敏感なワークフローでは、SDKはカスタマイズ可能なタイムアウトとポーリング間隔をサポートしています。
はい。solve_captchaを呼び出す際にパラメータにenterprise: trueを指定してください。reCAPTCHA Enterpriseは同じv2/v3タスクタイプを使用しますが、sトークンなどの追加パラメータが必要な場合があります。CapSolverサービスはEnterpriseバージョンを透過的に処理します。
No. トークンモードはブラウザを必要としません。サイトキーとURLを指定すると、トークンが返されます。ブラウザモード(Playwrightを必要とします)はオプションで、ライブページで自動検出と入力を行う場合に使用します。ほとんどのLangChainの統合では、シンプルさと速度のためトークンモードが使用されます。
reCAPTCHAトークンは約120秒で有効期限が切れます。フォームの送信に近いタイミングでトークンを取得してください。解決と送信の間に遅延があるワークフローの場合、「送信直前に解決する」パターンを実装してください。パイプラインの初期段階で解決するのではなく、です。
なぜトラフィック検証がAIエージェントインフラストラクチャの欠かせない要素であるかを発見してください。自律型エージェント向けの堅牢なソリューションを統合する方法を学びましょう。

- AIエージェントは、自動化されたタスク中に継続的な運用を維持するために強力なCAPTCHAの耐性が必要です。 - 構造化されたトラフィック検証戦略を実装することで、リスク管理メカニズムによる混乱を最小限に抑えることができます。 - 信頼性の高いCAPTCHA解決APIを活用することで、複雑な課題の効率的な処理が保証されます。 - 適切なインフラ設計により、コアエージェントロジックとボット保護管理を分離することができます。
