
Sora Fujimoto
AI Solutions Architect

AIアシスタントがウェブタスクを自動化するとき、CAPTCHAが最も大きな障害になります。保護されたページは送信されず、ログインフローは停止し、全体の自動化ループは人間の介入を待って停止します。
Nanobot は、自前のハードウェアで実行可能な超軽量な個人用AIアシスタントフレームワークです。WhatsApp、Telegram、Discord、Slack、メールなど、すでに使用しているチャネルに接続し、エージェントがスクリプトを自動的に書き込み実行できる組み込みの exec ツールを備えています。
CapSolver はAIを活用したCAPTCHA解決APIを提供するサービスです。Nanobotのスクリプト実行機能とCapSolverのREST APIを組み合わせることで、エージェントはCAPTCHAの検出、解決、トークンのインジェクト、フォームの送信を人間の介入なしに行うことができます。
最高の点は、ただエージェントに何をしたいかを平文で伝えるだけでよいということです。エージェントはPlaywrightスクリプトを書き、サイトキーを抽出し、CapSolverを呼び出し、トークンをインジェクトし、フォームを送信する——すべて自動的に行います。
Nanobot は約3,500行のコアPythonコードで構成される個人用AIアシスタントフレームワークです。軽量で拡張可能、かつセルフホスト可能な設計となっています。

Nanobotのexecツールは、ブラウザ自動化を可能にするものです。エージェントはあらゆるシェルコマンドを実行でき、ヘッドレスブラウザを制御するNode.jsスクリプトも実行可能です。あなたがウェブページとやり取りするようエージェントに依頼すると、それは:
execツールを介して実行するこれは、AIアシスタントに完全なコマンドラインアクセスを与えるようなものです——ツールのインストール、スクリプトの作成、実行、すべてが自然言語の指示から行われます。
CapSolver は、さまざまなCAPTCHAチャレンジを回避するためのAI駆動型ソリューションを提供するリーディングなCAPTCHA解決サービスです。複数のCAPTCHAタイプをサポートし、高速な応答時間を提供し、自動ワークフローにシームレスに統合されます。
ほとんどのCAPTCHA解決統合は、コードレベルのAPI統合(専用サービスクラスを書く)か、ブラウザ拡張機能(Chrome拡張機能がすべてを非表示で処理する)の2つのグループに分けられます。Nanobotは3つ目のアプローチを採用しています:エージェント駆動型API統合。
AIエージェント自体が、Playwrightスクリプトを書く、ページのDOMからサイトキーを抽出する、CapSolver APIを呼び出す、解決トークンをインジェクトする——すべてをスクリプトを書き、実行することで自動的に行います。
| ブラウザ拡張機能アプローチ | Nanobotのエージェント駆動型アプローチ |
|---|---|
| Chrome拡張機能のインストールが必要 | ただAPIキーが必要で、拡張機能は不要 |
| 互換性のあるChromeビルドが必要 | あらゆるヘッドレスブラウザで動作 |
| 拡張機能が自動的にCAPTCHAを検出 | エージェントがページのDOMからサイトキーを抽出 |
| 拡張機能がバックグラウンドでAPIを呼び出す | エージェントがCapSolver REST APIを直接呼び出す |
| 表示(サーバーではXvfb)が必要 | 完全なヘッドレスで、表示は必要ない |
重要な洞察: Nanobotのエージェントはブラウザ拡張機能が不要なのは、プログラム的にCapSolver APIを呼び出し、ページのDOMからサイトキーを抽出し、解決トークンをインジェクトできるからです——すべてPlaywrightスクリプトを通じてexecツールで実行します。これは、表示の設定なしで完全なヘッドレス環境で動作します。
注意: 以下の例は Ubuntu 22.04 / 24.04 でテストされています。コマンドは
aptとbashを使用しています——必要に応じてディストロに合わせて調整してください。
統合をセットアップする前に、以下のものを確認してください:
sudo apt install python3 python3-pip python3-venv)pip install nanobot-ai または pip install -e ".[dev]")# PyPIからインストール
pip install nanobot-ai
# 開発用にソースからインストール
git clone https://github.com/HKUDS/nanobot.git
cd nanobot
pip install -e ".[dev]"
# 設定とワークスペースを初期化
nanobot onboard
環境変数としてCapSolverのAPIキーを追加します:
export CAPSOLVER_API_KEY="CAP-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
APIキーは、CapSolverダッシュボードから取得できます。
永続的な設定のために、シェルプロファイル(~/.bashrc または ~/.zshrc)に追加してください。
UbuntuでPlaywrightとそのシステム依存関係をインストールします:
# Playwrightのブラウザ依存関係をインストール(Ubuntu)
sudo apt install -y libnss3 libatk-bridge2.0-0 libdrm2 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libasound2t64
# Playwrightをnanobotワークスペースにインストール
cd ~/.nanobot/workspace
npm init -y
npm install playwright
npx playwright install chromium
# チャネルサービス(Telegram、Discordなど)を起動
nanobot gateway
# またはインタラクティブなテスト用
nanobot agent
接続されたチャネルを通じてエージェントにテストメッセージを送信します:
利用可能なツールは何ですか?
エージェントはexecをリストアップするはずです——これはブラウザ自動化スクリプトを実行するために使用されます。
Nanobotには、常にロードされる組み込みのcapsolverスキルが含まれています。これにより、メッセージごとにエージェントは正しいCapSolver APIドキュメント、タスクタイプ、コードパターン、実行指示をコンテキストに持っています——それらを推測したり、検索したりする必要はありません。
スキルはnanobot/skills/{name}/SKILL.mdにあるMarkdownファイルで、YAMLフロントマターを持っています。メタデータにalways: trueが設定されている場合、スキルの全コンテンツがエージェントのシステムプロンプトに自動的にインジェクトされます。エージェントはread_fileを呼び出す必要はありません——それだけで知っています。
nanobot/skills/capsolver/SKILL.md)スキルをインストールするには、以下の内容でファイルnanobot/skills/capsolver/SKILL.mdを作成してください:
---
name: capsolver
description: "Playwrightを使用してCapSolver REST APIでCAPTCHAを解決します。reCAPTCHA v2、reCAPTCHA v3、Cloudflare Turnstileをサポートします。フォーム送信やページ操作でCAPTCHAチャレンジに遭遇したときに使用してください。"
metadata: {"nanobot":{"emoji":"🔓","always":true,"requires":{"bins":["node"],"env":["CAPSOLVER_API_KEY"]}}}
---
# CapSolver
## 重要: 実行が必要
ユーザーがCAPTCHAを解決するよう依頼した場合、**すぐにツールを呼び出す必要があります**。"実行中..."や"I'll start..."や"I've started the automation..."などのテキストで応答しないでください。
最初のアクションは以下のいずれかでなければなりません:
1. Node.jsスクリプトを`write_file`で保存し、その後`exec`で実行
2. 詳細なタスク説明を`spawn`でバックグラウンド実行用に渡す
テキストのみで応答し、ツール呼び出しをしない場合、ユーザーは何も起こっていないと感じます。常に実行してください。
## APIエンドポイント
- **タスク作成**: `POST https://api.capsolver.com/createTask`
- **結果取得**: `POST https://api.capsolver.com/getTaskResult`
## タスクタイプ
| CAPTCHA | タスクタイプ | サイトキーの場所 |
|---|---|---|
| reCAPTCHA v2 | `ReCaptchaV2TaskProxyLess` | `data-sitekey`属性 |
| reCAPTCHA v3 | `ReCaptchaV3TaskProxyLess` | `grecaptcha.execute`コールまたはページソース |
| Cloudflare Turnstile | `AntiTurnstileTaskProxyLess` | Turnstile divの`data-sitekey` |
エンタープライズバージョン: `ReCaptchaV2EnterpriseTaskProxyLess`、`ReCaptchaV3EnterpriseTaskProxyLess`。
## ワークフロー
1. Playwrightでページに移動(ヘッドレスChromium)
2. DOMからサイトキーを抽出(`[data-sitekey]`属性)
3. サイトキーとページURLで`createTask`を呼び出す
4. 2秒ごとに`getTaskResult`をポーリングし、`status: "ready"`になるまで待つ
5. トークンをページにインジェクト(隠しフォームフィールド)
6. フォームを送信
## コアコードパターン
```javascript
const CAPSOLVER_API_KEY = process.env.CAPSOLVER_API_KEY;
// ステップ1: タスク作成
const createRes = await fetch('https://api.capsolver.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'ReCaptchaV2TaskProxyLess', // または ReCaptchaV3TaskProxyLess、AntiTurnstileTaskProxyLess
websiteURL: pageUrl,
websiteKey: siteKey
}
})
});
const { taskId } = await createRes.json();
// ステップ2: 結果をポーリング
let token;
while (true) {
await new Promise(r => setTimeout(r, 2000));
const res = await fetch('https://api.capsolver.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ clientKey: CAPSOLVER_API_KEY, taskId })
});
const result = await res.json();
if (result.status === 'ready') { token = result.solution.gRecaptchaResponse || result.solution.token; break; }
if (result.status === 'failed') throw new Error('Solve failed');
}
// ステップ3: トークンをインジェクト(reCAPTCHA)
await page.evaluate((t) => {
document.querySelectorAll('textarea[name="g-recaptcha-response"]')
.forEach(el => { el.value = t; el.innerHTML = t; });
}, token);
```
Turnstileの場合、トークンフィールドは通常`input[name="cf-turnstile-response"]`で、解決は`result.solution.token`にあります。
## 完全なAPIリファレンス
すべてのタスクタイプのパラメータドキュメント、オプションフィールド、および例の応答については `{baseDir}/references/api.md` を参照してください。
重要なポイント:
always: trueフラグにより、このスキルはすべての会話にロードされます——エージェントは常にAPIドキュメントをコンテキストに持ちますrequiresフィールドはnodeがインストールされていることとCAPSOLVER_API_KEYが設定されていることを確認しますreferences/api.md)スキルはエージェントが必要に応じて読み込める完全なAPIリファレンスをバンドルしています。以下にカバーする内容を示します:
必須パラメータ: type、websiteURL、websiteKey
オプションパラメータ: isInvisible(Boolean)、pageAction(String)、recaptchaDataSValue(String)、enterprisePayload(Object)、apiDomain(String)
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://www.google.com/recaptcha/api2/demo",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
"isInvisible": false
}
}
応答トークン: solution.gRecaptchaResponse → textarea[name="g-recaptcha-response"]にインジェクト
必須パラメータ: type、websiteURL、websiteKey
オプションパラメータ: pageAction(String — grecaptcha.execute(key, {action: "..."})から、一般的な値: login、submit、homepage)、enterprisePayload(Object)、apiDomain(String)
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": "https://www.example.com",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-",
"pageAction": "login"
}
}
応答トークン: solution.gRecaptchaResponse → textarea[name="g-recaptcha-response"]にインジェクト
必須パラメータ: type(AntiTurnstileTaskProxyLess)、websiteURL、websiteKey
オプションパラメータ: metadata.action(String — data-action属性から)、metadata.cdata(String — data-cdata属性から)
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": "https://www.example.com",
"websiteKey": "0x4XXXXXXXXXXXXXXXXX",
"metadata": {
"action": "login",
"cdata": "0000-1111-2222-3333-example-cdata"
}
}
}
応答トークン: solution.token → input[name="cf-turnstile-response"]にインジェクト
| CAPTCHAタイプ | 解決時間 |
|---|---|
| reCAPTCHA v2 | 1-10秒 |
| reCAPTCHA v3 | 1-10秒 |
| Cloudflare Turnstile | 1-20秒 |
NanobotにCAPTCHA保護ページとやり取りするよう依頼すると、以下のような処理が裏で行われます:
あなたのメッセージ Nanobotエージェント
────────────────────────────────────────────────────
"そのページに行き、 ──► エージェントがメッセージを受信
フォームを埋め、 │
CAPTCHAを解決し、 ▼
送信してください" エージェントが自動化スクリプトを書く
│
▼
execツールがスクリプトを実行
┌─────────────────────────────────┐
│ ヘッドレスChromium │
│ │
│ 1. ターゲットページに移動 │
│ 2. DOMからサイトキーを抽出 │
│ (data-sitekey属性) │
│ │
│ 3. CapSolver REST APIを呼び出す: │
│ POST /createTask │
│ POST /getTaskResult (poll) │
│ │
│ 4. トークンを非表示の │
│ テキストエリア/入力フィールドに挿入 │
│ │
│ 5. 送信ボタンをクリック │
│ 6. 成功を確認 │
│ 7. スクリーンショットを取得 │
└─────────────────────────────────┘
│
▼
エージェントが出力とスクリーンショットを読み取る
│
▼
"フォームが正常に送信されました!
ページには「検証成功...おめでとう!」と表示されています"
### CapSolver APIフロー
統合のコアとなる2つのAPIコール:
**1. タスクの作成** — CAPTCHAのサイトキーとページURLをCapSolverに送信します:
```javascript
const response = await fetch('https://api.capsolver.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'ReCaptchaV2TaskProxyLess',
websiteURL: pageUrl,
websiteKey: siteKey
}
})
});
2. 結果のポーリング — CapSolverが解決されたトークンを返すまで2秒ごとにチェックします:
const result = await fetch('https://api.capsolver.com/getTaskResult', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: CAPSOLVER_API_KEY,
taskId: taskId
})
});
// result.solution.gRecaptchaResponseにトークンが含まれます
3. トークンの挿入 — reCAPTCHAが期待する非表示フォームフィールドに設定します:
await page.evaluate((token) => {
const textarea = document.querySelector('textarea[name="g-recaptcha-response"]');
if (textarea) {
textarea.value = token;
textarea.innerHTML = token;
}
}, captchaToken);
Nanobotのエージェントが生成して実行した、GoogleデモページでのreCAPTCHA解決の実際のスクリプトです。エージェントはwrite_fileでこれを記録し、execで実行しました—すべてが1つのDiscordメッセージから自動的に行われます:
const { chromium } = require('playwright');
const https = require('https');
const CAPSOLVER_API_KEY = process.env.CAPSOLVER_API_KEY;
const PAGE_URL = 'https://www.google.com/recaptcha/api2/demo';
function httpsPost(url, data) {
return new Promise((resolve, reject) => {
const req = https.request(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
}, (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => resolve(JSON.parse(body)));
});
req.on('error', reject);
req.write(JSON.stringify(data));
req.end();
});
}
async function solveRecaptcha(siteKey, pageUrl) {
console.log('CapSolverタスクを作成中...');
const createRes = await httpsPost('https://api.capsolver.com/createTask', {
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'ReCaptchaV2TaskProxyLess',
websiteURL: pageUrl,
websiteKey: siteKey
}
});
const { taskId } = createRes;
console.log(`タスクID: ${taskId}`);
let token;
while (true) {
await new Promise(r => setTimeout(r, 2000));
const res = await httpsPost('https://api.capsolver.com/getTaskResult', {
clientKey: CAPSOLVER_API_KEY,
taskId
});
if (res.status === 'ready') {
token = res.solution.gRecaptchaResponse;
console.log(`トークンを取得しました!長さ: ${token.length}`);
break;
}
if (res.status === 'failed') {
throw new Error('CapSolverタスクが失敗しました');
}
}
if (!token) throw new Error('トークンを取得できませんでした');
return token;
}
async function main() {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
console.log('ページに移動中...');
await page.goto(PAGE_URL, { waitUntil: 'domcontentloaded', timeout: 30000 });
console.log('サイトキーを抽出中...');
const siteKey = await page.locator('[data-sitekey]').getAttribute('data-sitekey');
console.log(`サイトキー: ${siteKey}`);
console.log('CapSolverでreCAPTCHAを解決中...');
const token = await solveRecaptcha(siteKey, PAGE_URL);
console.log('トークンを挿入中...');
await page.evaluate((t) => {
document.querySelectorAll('textarea[name="g-recaptcha-response"]')
.forEach(el => { el.value = t; el.innerHTML = t; });
}, token);
console.log('フォームを送信中...');
await page.locator('input[type="submit"]').click();
console.log('結果を待機中...');
await page.waitForTimeout(3000);
const successText = await page.textContent('body');
if (successText.includes('Success') || successText.includes('Verification')) {
console.log('\n✅ 成功!reCAPTCHAが解決され、フォームが正常に送信されました!');
console.log('成功メッセージ:', successText.slice(0, 200));
} else {
console.log('\n❌ 結果が不明です。ページの内容:', successText.slice(0, 300));
}
await page.screenshot({ path: 'recaptcha_result.png' });
console.log('スクリーンショットをrecaptcha_result.pngに保存しました');
await browser.close();
}
main().catch(console.error);
実行方法:
CAPSOLVER_API_KEY=CAP-XXX node solve_recaptcha.js
セットアップが完了したら、CapSolverをNanobotと使うのは非常に簡単です。メッセージを送るだけで動作します。
Telegram、Discord、WhatsApp、または接続されたチャネルを通じてエージェントに以下を送信してください:
https://www.google.com/recaptcha/api2/demoに移動し、CapSolver APIを使用してreCAPTCHAを解決し、フォームを送信して、それが成功したかどうかを教えてください。
起こること:
createTask APIを呼び出しますgetTaskResultをポーリングします(約18秒)g-recaptcha-responseフィールドに挿入しますhttps://example.com/loginに移動し、メールアドレスに"me@example.com"、パスワードに"mypassword"を入力し、ページに表示されるCAPTCHAを検出し、解決して、サインインをクリックし、何が起こったかを教えてください。
https://example.com/contactを開き、名前、メールアドレス、メッセージのフィールドに入力し、CAPTCHAを解決し、フォームを送信し、確認メッセージを教えてください。
Nanobotのエージェントには以下があります:
execツール — 任意のシェルコマンドを実行できます(Node.jsスクリプトも含む)web_fetchツール — ページ構造を理解するためにページコンテンツを取得しますcapsolverスキル — エージェントのコンテキストに常にロードされます(上記の組み込みのCapSolverスキルを参照)、タスクタイプ、コードパターン、APIリファレンス、実行指示が含まれており、エージェントがスクリプトを記述するのではなく実行することを保証しますLLM駆動エージェントの課題の1つは、モデルが「今から実行します」といったテキストを返すが、ツールを呼び出さないことです。ユーザーは進行状況が見えないまま、進捗がない状態を見ています。
Nanobotは、エージェントループに組み込まれたハルシネーションリトライメカニズムでこれを解決します。LLMが最初の反復でツール呼び出しをしないでテキストを返した場合、Nanobotはそれを検出し、自動的に修正プロンプトを送信します:
"あなたはタスクを開始したと説明しましたが、ツールを呼び出しませんでした。ユーザーはexec、write_file、spawnなどのツールを使用しないと進捗が見えません。実際にタスクを実行するには適切なツールを呼び出してください。"
LLMは再度試行し、実際のツール(例: spawnでバックグラウンドの自動化タスクを起動)を呼び出します。これは透過的に行われます—ユーザーは数秒後に結果が表示されるだけです。
これはNanobotの一般的な機能であり、すべてのツール使用タスクの信頼性を向上させます。組み込みのcapsolverスキルの明確な実行指示と組み合わせることで、エージェントがただ何をすることを説明するのではなく、実際に行動することを保証します。
ハルシネーションリトライとその他の信頼性向上のため、Nanobotインストールに以下の3つの変更を適用してください:
1. ハルシネーションリトライ (nanobot/agent/loop.py)
_process_messageメソッドのelseブランチを置き換えます:
else:
# ツール呼び出しなし — しかしLLMが行動を幻覚しているか確認
if iteration == 1 and self._seems_like_hallucinated_action(response.content):
logger.warning("LLMがツール呼び出しなしで行動を説明しました — リトライします")
messages.append({"role": "assistant", "content": response.content})
messages.append({
"role": "user",
"content": (
"[システム: あなたはタスクを開始したと説明しましたが、ツールを呼び出しませんでした。ユーザーはexec、write_file、spawnなどのツールを使用しないと進捗が見えません。実際にタスクを実行するには適切なツールを呼び出してください。]"
),
})
continue
final_content = response.content
break
そして、AgentLoopクラスにこの検出メソッドを追加します:
@staticmethod
def _seems_like_hallucinated_action(content: str | None) -> bool:
"""LLMがツール呼び出しなしで行動を説明しているかを検出します。"""
if not content:
return False
lower = content.lower()
phrases = [
"running now", "i've started", "i'll start", "starting the",
"i've begun", "i'll begin", "executing now", "i'm working on",
"let me run", "running the", "i've kicked off", "launched the",
"i've initiated", "working on it",
]
return any(phrase in lower for phrase in phrases)
2. サブエージェントのスキル (nanobot/agent/subagent.py)
spawnツールで生成されたサブエージェントは、デフォルトではcapsolverスキルを持っていません。以下を追加します:
// 以下をインポート
from nanobot.agent.skills import SkillsLoader
// __init__に追加:
self._skills = SkillsLoader(workspace)
// _build_subagent_prompt()の最後に追加:
always_skills = self._skills.get_always_skills()
if always_skills:
skills_content = self._skills.load_skills_for_context(always_skills)
if skills_content:
prompt += f"\n\n## 参考ドキュメント\n\n{skills_content}"
return prompt
3. Execタイムアウト (nanobot/config/schema.py)
ブラウザ自動化スクリプトはデフォルトの60秒より長く必要です — CapSolverポーリングだけで20秒以上かかることがあります。タイムアウトを増やします:
class ExecToolConfig(BaseModel):
"""シェル実行ツールの設定。"""
timeout: int = 120 # 以前は60
これらの変更を適用した後、Nanobotを再起動してください(pm2 restart nanobotまたはサービスを再実行)。
GoogleのreCAPTCHA v2デモページで統合をテストしました。デモ実行の実際の結果は以下の通りです:
| メトリクス | 値 |
|---|---|
| エージェントの思考 + スクリプト生成 | 約10秒 |
| スクリプト実行(全体) | 約34秒 |
| ページ読み込み(domcontentloaded) | 約2秒 |
| サイトキー抽出 | 1秒未満 |
| CAPTCHA解決(CapSolver API) | 約20秒 |
| トークン挿入 + フォーム送信 | 約3秒 |
| 成功確認 + スクリーンショット | 約3秒 |
| エンドツーエンド(メッセージ → 応答) | 約45秒 |
| 結果 | 検証成功 |
エージェントはフォーム送信後の成功ページを示す最終的なスクリーンショット(recaptcha_result.png)を保存しました。
Playwrightがワークスペースにインストールされていません。以下を実行してください:
cd ~/.nanobot/workspace && npm install playwright && npx playwright install chromium
Chromiumがエラーで起動できない場合、システムの依存関係をインストールしてください:
sudo apt install -y libnss3 libatk-bridge2.0-0 libdrm2 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libasound2t64
readyまたはfailedを返すまでポーリングします — これに時間がかかる場合は、APIキーと残高を確認してくださいスクリプトはreCAPTCHAのDOM要素のdata-sitekey属性からサイトキーを抽出します。data-sitekeyを持つ要素が見つからない場合、ページはキーを別の方法で埋め込んでいる可能性があります — エージェントは必要に応じてiframeのURLやページソースから抽出するようにスクリプトを変更できます。
Playwrightの起動オプションに以下のフラグを追加してください:
chromium.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage']
});
CAPSOLVER_API_KEY環境変数がNanobot起動前に設定されているか確認してください。エージェントはスクリプト実行時にそれをチェックします。
スクリプトにハードコードしないでください。process.env.CAPSOLVER_API_KEYを使用して、エージェントが自動的に取得できるようにします。
NanobotのAPIベースのアプローチは完全なヘッドレス環境で動作します — Xvfbや仮想ディスプレイは必要ありません。これは拡張機能ベースのアプローチと比較して大きな利点です。
各CAPTCHAの解決にはクレジットが必要です。定期的にcapsolver.com/dashboardで残高を確認してください。
CAPTCHAプロバイダーは進化し続けます。検出問題を避けるために、PlaywrightとChromiumを最新の状態に保ってください:
cd ~/.nanobot/workspace && npm update playwright && npx playwright install chromium
Nanobot + CapSolverの統合は、拡張機能ベースのCAPTCHA解決とは根本的に異なるアプローチを採用しています。Chrome拡張機能をロードする代わりに、AIエージェント自体がすべての解決フローを調整します:
これにより、以下の利点があります:
さっそく始めたいですか? CapSolverに登録し、初回チャージで6%のボーナスを追加するためのボーナスコードNANOBOTを使用してください!

NanobotはREST APIを直接使用します。エージェントはcreateTaskとgetTaskResultを呼び出すスクリプトを書いたり実行したりして、解決トークンを取得し、それをページのDOMに挿入します。ブラウザ拡張機能は必要ありません。
いいえ。ブラウザ拡張機能に依存するアプローチでは、ブランド版Chrome 137以降で拡張機能の読み込みが無効になったため、Chrome for Testingが必要ですが、NanobotはあらゆるChromiumビルドで動作します。PlaywrightのバンドルChromium、標準Chromiumパッケージ、またはヘッドレスChromeでも動作します。
CapSolverはreCAPTCHA v2(チェックボックスおよび非表示)、reCAPTCHA v3、Cloudflare Turnstile、AWS WAF CAPTCHAなどに対応しています。Nanobotの統合はreCAPTCHA v2でテストされ、ReCaptchaV2TaskProxyLessタスクタイプを使用しています。他のCAPTCHAタイプの場合、エージェントは適切なCapSolverタスクタイプを使用してスクリプトを書くことができます。詳細はCapSolverドキュメントをご覧ください。
はい。これはNanobotのアプローチが光るところです。ブラウザ拡張機能は関与していないため、Xvfbや仮想ディスプレイは必要ありません。Playwrightは標準で完全なヘッドレスモードで動作します。
CapSolverはCAPTCHAの種類や数量に基づいて競争力のある価格を提供しています。現在の価格についてはcapsolver.comにアクセスしてください。
Nanobotはオープンソースで、自分のハードウェア上で無料で実行できます。AIモデルプロバイダーのAPIキーが必要であり、CAPTCHAの解決にはCapSolverアカウントとクレジットが必要です。
reCAPTCHA v2のテストでは、CapSolver APIは約20秒で解決を返しました。エージェントは2秒ごとにポーリングし、トークンが準備でき次第すぐに処理を続けます。スクリプト実行時間(ナビゲート+解決+インジェクト+送信)は約34秒で、メッセージから応答までのエンドツーエンド時間はエージェントがスクリプトを書く時間を含めて約45秒でした。
LLMを駆動するAIオートメーションインフラがCAPTCHA認識をどのように変革するかを発見してください。ビジネスプロセスの効率を向上させ、手動の介入を削減します。高度な検証ソリューションで自動化されたオペレーションを最適化してください。

大規模言語モデルのトレーニングのためのデータ収集をスケールする方法を学びましょう。大規模にCAPTCHAを解くことで、AIモデル用の高品質なデータセットを構築するための自動化された戦略を発見しましょう。
