
Sora Fujimoto
AI Solutions Architect

AI駆動のウェブ自動化がCAPTCHAの壁にぶつかると、全体のパイプラインが停止します。ページが読み込まれず、フォームが送信できず、データ抽出が止まる—すべてはロボットをブロックするように設計されたチャレンジが原因です。TinyFish AgentQLは、AIをウェブに接続するための強力なツールキットで、自然言語クエリ、Playwright統合、エンタープライズ規模での構造化されたデータ抽出を特徴とします。しかし、どのブラウザ自動化フレームワークと同様に、CAPTCHAで詰まってしまいます。
CapSolverはこれを完全に変えるものです。AgentQLのPlaywright駆動のブラウザコンテキストにCapSolver Chrome拡張機能を読み込むことで、CAPTCHAは背景で自動的かつ見えない形で解決されます。手動で解く必要はありません。あなたの側で複雑なAPIのオーケストレーションも必要ありません。あなたの自動化スクリプトは、CAPTCHAが存在しなかったかのように動作し続けます。
最高の点は、あなたのAgentQLクエリとスクリプトに1行のCAPTCHA関連のコードも必要ないということです。拡張機能は、検出、解決、トークンの挿入をすべて独自に処理し、エージェントはデータ抽出とワークフローの自動化に専念できます。
TinyFish AgentQLは、AIエージェントやLLMをライブウェブ環境に接続するためのエンタープライズグレードのツールキットです。TinyFishによって開発され、ページ要素を検索し、自然言語を使用して構造化されたデータを抽出するAI駆動のクエリ言語を提供します—破壊しやすいCSSセレクターやXPathsは必要ありません。
AgentQLはあらゆるページで動作します—認証されたコンテンツや動的に生成されたページを含む—大規模なウェブ自動化、データ収集、AIエージェントワークフローに最適です。
CapSolverは、さまざまなCAPTCHAチャレンジを自動的に解決するリーディングなAI駆動のCAPTCHA解決サービスです。高速な応答時間と広範な互換性により、自動化ワークフローにシームレスに統合されます。
ほとんどのCAPTCHA解決の統合では、ボイラープレートコードを書く必要があります:タスクを作成し、結果をポーリングし、隠しフィールドにトークンを挿入します。これは、ローカルなPlaywrightまたはPuppeteerスクリプトで標準的なアプローチです。
AgentQL + CapSolverは根本的に異なるアプローチを取ります:
| 従来の(コードベース) | AgentQL + CapSolver拡張機能 |
|---|---|
| CapSolverサービスクラスを記述 | Playwrightコンテキストで拡張機能をロード |
createTask() / getTaskResult()を呼び出す |
拡張機能がすべて自動的に処理します |
page.evaluate()を介してトークンを挿入 |
トークンの挿入は目に見えません |
| エラー、リトライ、タイムアウトをコードで処理 | 拡張機能が内部でリトライを管理します |
| 各CAPTCHAタイプごとに異なるコード | すべてのタイプで自動的に動作します |
重要な洞察: CapSolver拡張機能はAgentQLのPlaywrightブラウザコンテキスト内で実行されます。AgentQLがCAPTCHAのあるページに移動すると、拡張機能はそれを検出し、背景で解決し、トークンを挿入します—あなたのスクリプトがフォームとインタラクションする前にすべてが完了します。あなたの自動化コードはクリーンで、CAPTCHAフリーのままです。
統合をセットアップする前に、以下のものを確認してください:
重要: Chrome拡張機能はChromiumで動作し、永続的なコンテキストが必要です。これはPlaywrightの要件であり、AgentQLの制限ではありません。
Python SDK:
pip install agentql
playwright install chromium
JavaScript SDK:
npm install agentql
npx playwright install chromium
CapSolver Chrome拡張機能をダウンロードし、専用のディレクトリに抽出します:
CapSolver.Browser.Extension-chrome-v1.17.0.zipをダウンロードmkdir -p ~/capsolver-extension
unzip CapSolver.Browser.Extension-chrome-v*.zip -d ~/capsolver-extension/
ls ~/capsolver-extension/manifest.json
manifest.jsonが表示されれば、拡張機能が正しい場所にあります。
~/capsolver-extension/assets/config.jsの拡張機能の設定ファイルを開き、apiKeyの値を自分のものに置き換えます:
export const defaultConfig = {
apiKey: 'CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // ← ここにあなたのキーを入力
useCapsolver: true,
// ... その他の設定
};
あなたのAPIキーはCapSolverダッシュボードから取得できます。
重要なステップは、永続的なコンテキストでPlaywrightのChromiumを起動し、CapSolver拡張機能をロードすることです。
Python例:
import agentql
from playwright.sync_api import sync_playwright
import time
import os
# CapSolver拡張機能のパス
CAPSOLVER_EXTENSION_PATH = os.path.expanduser("~/capsolver-extension")
def main():
with sync_playwright() as p:
# 永続的なコンテキストとCapSolver拡張機能でChromiumを起動
context = p.chromium.launch_persistent_context(
user_data_dir="./browser-data",
headless=False, # 拡張機能はヘッドレスモードでは動作しません
args=[
f"--disable-extensions-except={CAPSOLVER_EXTENSION_PATH}",
f"--load-extension={CAPSOLVER_EXTENSION_PATH}",
],
)
# AgentQLでページをラップしてAI駆動のクエリを実行
page = agentql.wrap(context.pages[0])
# あなたのターゲットページに移動
page.goto("https://example.com/protected-page")
# CapSolverがCAPTCHAを検出および解決するのを待つ
time.sleep(30)
# AgentQLの自然言語クエリを使用して送信ボタンを検索およびクリック
response = page.query_elements("""
{
submit_button
}
""")
# 送信ボタンをクリック—CAPTCHAはすでに解決されています!
response.submit_button.click()
# 送信後のデータを抽出
result = page.query_data("""
{
confirmation_message
}
""")
print(f"結果: {result['confirmation_message']}")
context.close()
if __name__ == "__main__":
main()
JavaScript例:
const { chromium } = require('playwright');
const agentql = require('agentql');
const path = require('path');
const os = require('os');
const CAPSOLVER_EXTENSION_PATH = path.join(os.homedir(), 'capsolver-extension');
(async () => {
// 永続的なコンテキストとCapSolver拡張機能でChromiumを起動
const context = await chromium.launchPersistentContext('./browser-data', {
headless: false, // 拡張機能はヘッドレスモードでは動作しません
args: [
`--disable-extensions-except=${CAPSOLVER_EXTENSION_PATH}`,
`--load-extension=${CAPSOLVER_EXTENSION_PATH}`,
],
});
// 最初のページを取得し、AgentQLでラップ
const page = agentql.wrap(context.pages()[0]);
// ターゲットページに移動
await page.goto('https://example.com/protected-page');
// CapSolverがCAPTCHAを処理するのを待つ
await page.waitForTimeout(30000);
// AgentQLクエリを使用して操作—CAPTCHAはすでに解決されています
const response = await page.queryElements(`{
submit_button
}`);
await response.submit_button.click();
// 結果データを抽出
const result = await page.queryData(`{
confirmation_message
}`);
console.log('結果:', result.confirmation_message);
await context.close();
})();
ブラウザを起動した後、ブラウザウィンドウで chrome://extensions に移動して、CapSolver拡張機能がアクティブであることを確認してください。拡張機能がリストに表示され、有効になっているはずです。
または、ブラウザコンソールでCapSolverのログメッセージを確認して、サービスワーカーが実行されていることを確認してください。
セットアップが完了したら、AgentQLでCapSolverを使用するのは簡単です。
CAPTCHA固有のコードを書かないでください。 CAPTCHA保護されたフォームとインタラクションする前に待機時間を追加し、拡張機能にすべてを任せます。
page.goto("https://example.com/contact")
# AgentQLクエリを使用してフォームを入力
response = page.query_elements("""
{
contact_form {
name_field
email_field
message_field
submit_button
}
}
""")
response.contact_form.name_field.fill("John Doe")
response.contact_form.email_field.fill("john@example.com")
response.contact_form.message_field.fill("Hello, I have a question about your services.")
# CapSolverがCAPTCHAを解決するのを待つ
time.sleep(30)
# CAPTCHAトークンはすでに挿入されているので送信
response.contact_form.submit_button.click()
page.goto("https://example.com/login")
# CapSolverがTurnstileチャレンジを解決するのを待つ
time.sleep(25)
# AgentQLでログインフォームの要素を検索
response = page.query_elements("""
{
login_form {
email_input
password_input
login_button
}
}
""")
# フォームを入力—Turnstileはすでに処理されています
response.login_form.email_input.fill("me@example.com")
response.login_form.password_input.fill("mypassword123")
# ログインをクリック
response.login_form.login_button.click()
page.goto("https://example.com/data")
# あらゆるCAPTCHAチャレンジが解除されるのを待つ
time.sleep(30)
# AgentQLで構造化されたデータを抽出
data = page.query_data("""
{
products[] {
name
price
rating
availability
}
}
""")
for product in data['products']:
print(f"{product['name']}: ${product['price']} ({product['rating']} stars)")
| CAPTCHAタイプ | 通常の解決時間 | 推奨の待機時間 |
|---|---|---|
| reCAPTCHA v2(チェックボックス) | 5-15秒 | 30-60秒 |
| reCAPTCHA v2(非表示) | 5-15秒 | 30秒 |
| reCAPTCHA v3 | 3-10秒 | 20-30秒 |
| Cloudflare Turnstile | 3-10秒 | 20-30秒 |
ヒント: 不確実な場合は30秒を使用してください。早すぎる送信よりも少し長く待つほうが良いです。余分な時間は結果に影響しません。
AgentQLがCapSolver拡張機能をロードして実行するときの仕組みは次の通りです:
あなたのAgentQLスクリプト
───────────────────────────────────────────────────
page.goto("https://...") ──► Chromiumがページを読み込む
│
▼
┌─────────────────────────────┐
│ CAPTCHAウィジェットのあるページ │
│ │
│ CapSolver拡張機能: │
│ 1. コンテンツスクリプトがページ上のCAPTCHAを検出 │
│ 2. サービスワーカーがCapSolver APIを呼び出す │
│ 3. トークンが受信される │
│ 4. トークンが隠しフォームフィールドに挿入される │
└─────────────────────────────┘
│
▼
time.sleep(30) 拡張機能がCAPTCHAを解決...
│
▼
page.query_elements(...) AgentQLがフォーム要素を検出
submit_button.click() フォームが有効なトークンで送信
│
▼
"検証に成功しました!"
Playwrightが--load-extensionフラグでChromiumを起動すると:
AgentQL + CapSolver統合のすべての構成オプションを含む完全なPython設定例です:
import agentql
from playwright.sync_api import sync_playwright
import os
# 設定
CAPSOLVER_EXTENSION_PATH = os.path.expanduser("~/capsolver-extension")
USER_DATA_DIR = "./browser-data"
with sync_playwright() as p:
context = p.chromium.launch_persistent_context(
user_data_dir=USER_DATA_DIR,
headless=False,
args=[
f"--disable-extensions-except={CAPSOLVER_EXTENSION_PATH}",
f"--load-extension={CAPSOLVER_EXTENSION_PATH}",
],
)
page = agentql.wrap(context.pages[0])
# ... あなたの自動化コードここに
context.close()
| オプション | 説明 |
|---|---|
user_data_dir |
ブラウザプロファイルデータ(クッキー、セッション)を保存するディレクトリ。永続的なコンテキストに必須です。 |
headless |
False でなければなりません—Chrome拡張機能はヘッドレスモードでは動作しません。 |
--disable-extensions-except |
どの拡張機能がロードされるかを制限(競合を防ぐため)。 |
--load-extension |
UnpackedされたCapSolver拡張機能のディレクトリへのパス。 |
CAPSOLVER_EXTENSION_PATH |
manifest.jsonを含む抽出されたCapSolver拡張機能のフルパス。 |
CapSolverのAPIキーは、拡張機能のassets/config.jsファイルに直接設定されます(上記のステップ3を参照)。
上記の内容は、ローカルで実行されているChromiumで永続的なPlaywrightコンテキストを使用していることを前提としています。これにより、CapSolver拡張機能をロードできます。しかし、すべての設定がこのようなコントロールを提供するわけではありません。あなたの自動化がTinyFishブラウザのリモートでオンデマンドのブラウザセッションサービスを使用している場合、Chromiumプロセスを直接管理することはできず、同じようにアンパッケージされた拡張機能をロードすることはできません。
このようなシナリオでは、CapSolverはAPIを介して統合できます。これは、スクリプト内で直接実行される「従来の」コードベースのアプローチです。TinyFishブラウザからリモートブラウザセッションをリクエストし、Playwrightを介してCDPで接続し、CapSolver SDKを使用してCAPTCHAを解決し、ページに結果のトークンを直接インジェクトします。これは、拡張機能をブラウザインスタンスにロードできない場合に適した方法です。
開始する前に、CapSolver SDKをインストールしてください:
pip install capsolver
以下のコードは、TinyFishブラウザセッション内でreCAPTCHAを解決する方法を示しています:
import time
import requests
import capsolver
from playwright.sync_api import sync_playwright
TINYFISH_API_KEY = "YOUR TINYFISH API KEY"
capsolver.api_key = "YOUR CAPSOLVER API KEY"
website_url = "https://www.google.com/recaptcha/api2/demo"
website_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
captcha_type = "ReCaptchaV2TaskProxyLess"
def create_tinyfish_browser(url):
resp = requests.post(
"https://api.browser.tinyfish.ai",
headers={
"X-API-Key": TINYFISH_API_KEY,
"Content-Type": "application/json",
},
json={
"url": url,
"timeout_seconds": 300,
},
timeout=90,
)
resp.raise_for_status()
return resp.json()
def close_tinyfish_browser(session_id):
try:
requests.delete(
f"https://api.browser.tinyfish.ai/{session_id}",
headers={"X-API-Key": TINYFISH_API_KEY},
timeout=30,
)
except Exception as exc:
print(" TinyFishブラウザセッションを閉じられませんでした:", repr(exc))
def solve_recaptcha_v2():
print("3. CapSolverでreCAPTCHAを解決中")
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": website_url,
"websiteKey": website_key,
})
token = solution.get("gRecaptchaResponse")
if not token:
raise RuntimeError(f"CapSolverからreCAPTCHAトークンが返却されませんでした: {solution}")
print(" CapSolverタスクが解決されました:", token)
return token
def inject_recaptcha_token(page, token):
page.evaluate(
"""
(token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = token;
}
}
""",
token,
)
print(" CapSolverトークンがインジェクトされました")
page.click('input[type="submit"]')
print(" 送信ボタンがクリックされました")
def main():
session_id = None
try:
print("1. TinyFishブラウザセッションの作成")
session = create_tinyfish_browser(website_url)
session_id = session["session_id"]
cdp_url = session["cdp_url"]
print(" TinyFishセッションID:", session_id)
print(" TinyFish CDP URL:", cdp_url)
with sync_playwright() as p:
print("2. CDPを介してTinyFishブラウザに接続中")
browser = p.chromium.connect_over_cdp(cdp_url)
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
page.wait_for_load_state("domcontentloaded", timeout=60000)
print(" 現在のページURL:", page.url)
token = solve_recaptcha_v2()
print("4. CapSolverトークンのインジェクト")
inject_recaptcha_token(page, token)
page.wait_for_load_state("domcontentloaded", timeout=30000)
time.sleep(3)
body_text = page.locator("body").inner_text(timeout=10000)
print("5. ページの結果:", " ".join(body_text.split()))
print("6. ブラウザセッションの終了")
browser.close()
finally:
if session_id:
close_tinyfish_browser(session_id)
if __name__ == "__main__":
main()
あなたの設定に合ったアプローチを選択してください — ローカルで永続的なPlaywrightコンテキストにCapSolver拡張機能をロードするか、リモートのTinyFishブラウザセッションに対してCapSolver APIを直接呼び出すか — どちらの方法でも最終的な目的は同じです。AgentQLの自動化は、独自のCAPTCHA処理ロジックを持つ必要はありません。
症状: CAPTCHAが自動的に解決されない。
原因: 通常のブラウザコンテキストを使用しているか、ヘッドレスモードで実行している可能性があります。
解決策: Playwrightで拡張機能を使用するには、永続的なコンテキストとヘッドモードが必要です:
# ✅ 正しい — 永続的なコンテキスト、ヘッドモード
context = p.chromium.launch_persistent_context(
user_data_dir="./browser-data",
headless=False,
args=[...拡張機能引数...]
)
# ❌ 間違っている — 通常のコンテキスト(拡張機能はロードされない)
browser = p.chromium.launch()
context = browser.new_context()
可能性のある原因:
症状: スクリプトは実行されるが、拡張機能が表示されない。
原因: Chrome拡張機能はヘッドレスモードで動作しません。
解決策: サーバーで仮想ディスプレイを使用してヘッドモードで実行してください:
# Xvfbのインストール
sudo apt-get install xvfb
# 仮想ディスプレイの起動
Xvfb :99 -screen 0 1280x720x24 &
# DISPLAYの設定
export DISPLAY=:99
症状: 拡張機能フラグが無視される。
原因: Google Chrome 137以降では、ブランドドビルドで--load-extensionがサポートされなくなりました。
解決策: PlaywrightのバンドルされたChromium(推奨)またはChrome for Testingを使用してください:
# 推奨のPlaywright Chromiumのインストール
npx playwright install chromium
# またはChrome for Testingをダウンロード
# 以下を参照: https://googlechromelabs.github.io/chrome-for-testing/
launch_persistent_context()を使用してください。これにより、クッキーとセッションデータが実行間で保持され、CAPTCHAの頻度が減少します。TinyFish AgentQL + CapSolverの統合により、利用可能な最も強力なウェブ自動化ツールキットに非表示のCAPTCHA解決をもたらします。複雑なCAPTCHA処理コードを書く必要はありません。単に:
CapSolver Chrome拡張機能が残りの処理をすべて行います — CAPTCHAの検出、CapSolver APIを介した解決、およびページへのトークンのインジェクト。AgentQLスクリプトはCAPTCHAについて一切知らなくても構いません。
そして、自動化がリモートセッション(例: TinyFishブラウザ)で実行される場合、CapSolverのAPIとSDKを使用して、CDP経由でセッションに接続し、解決し、インジェクトすることで、同じ結果を得られます。これは、AI駆動のウェブ自動化とAI駆動のCAPTCHA解決を組み合わせたCAPTCHA解決の姿です:非表示、自動的、コードフリーです。
準備ができましたか? CapSolverに登録し、初回のチャージで6%のボーナスを獲得するには、バーコードAGENTQLを使用してください!

いいえ。CapSolver拡張機能はPlaywrightブラウザコンテキスト内で背景で動作します。フォームの送信前にtime.sleep()またはwaitForTimeout()を追加するだけで、拡張機能が自動的に検出、解決、トークンのインジェクトを処理します。
Playwrightでは、launch_persistent_context()を使用する場合にのみChrome拡張機能がサポートされます。これはPlaywrightのアーキテクチャの要件です。browser.new_context()で作成された通常のブラウザコンテキストは拡張機能をロードできません。
いいえ。Chrome拡張機能はヘッドモードのブラウザが必要です。ディスプレイが利用できないサーバー環境では、Xvfb(X Virtual Framebuffer)を使用して仮想ディスプレイを設定してください。
直接ブラウザの起動を制御できないため、TinyFishブラウザセッションにCapSolver拡張機能をロードすることはできません。代わりに、CDP経由で接続した後、page.evaluate()を介して結果のトークンをインジェクトするCapSolver SDKを使用してください。これは上記の「TinyFishブラウザでCapSolverを使用する方法」セクションで示されています。
CapSolverはreCAPTCHA v2(チェックボックスおよび非表示)、reCAPTCHA v3、Cloudflare Turnstile、AWS WAF CAPTCHAなどに対応しています。拡張機能は自動的にCAPTCHAの種類を検出し、それに応じて解決します。
CapSolverはCAPTCHAの種類とボリュームに基づいて競争力のある料金を提供しています。現在の料金はcapsolver.comをご覧ください。
AgentQLは無料および有料のエディションを提供しています。SDKとクエリ言語は開発およびテスト用に利用可能です。料金の詳細はtinyfish.aiをご覧ください。
ほとんどのCAPTCHAでは、30〜60秒が十分です。実際の解決時間は通常5〜20秒ですが、余分なバッファを追加することで信頼性が向上します。心配な場合は、30秒を使用してください。