
Sora Fujimoto
AI Solutions Architect

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)は、人間のユーザーと自動化されたボットを区別するためのセキュリティメジャーです。画像認識、テキストの歪み、またはインタラクティブなパズルなどのチャレンジを提示することが多く、人間には簡単ですがボットには難しいものです。CAPTCHAはウェブサイトを自動的な悪用から保護しますが、正当な自動化やウェブスクレイピング活動においては大きな障壁となることがあります。
このブログでは、PlaywrightとCapSolver拡張機能を使用してCAPTCHAを解く方法について紹介します。また、PythonとGoを使用してreCAPTCHAをCapSolver APIで解く方法も見ていきます。
CAPTCHAは、ウェブサイトが自動アクセスを防ぎ、ユーザーが人間であることを確認するためのセキュリティメカニズムです。一般的なタイプには以下があります:
CapSolverは、キャプチャやreCAPTCHAを含むさまざまなタイプのCAPTCHAを自動的に解決する強力なツールです。ウェブ自動化ワークフローへのシームレスな統合を可能にするブラウザ拡張機能とAPIを提供しています。
CapSolverのボーナスコードを取得する
オートメーション予算を即座に増やそう!
CapSolverアカウントにチャージする際にボーナスコード CAPN を使用すると、毎回 5%のボーナス を受け取れます — 限度はありません。
CapSolverダッシュボードで今すぐ取得してください
。
まず、Playwrightをインストールする必要があります。これはnpmを介して行うことができます:
npm install playwright
./CapSolver.Browser.Extension ディレクトリに解凍します。./assets/config.json の設定を調整します。enabledForcaptcha を true に設定し、自動解決用に captchaMode を token に設定してください。設定変更の例:
{
"enabledForcaptcha": true,
"captchaMode": "token"
}
以下は、CapSolver拡張機能を使用してCAPTCHAを解決するための例のスクリプトです:
const { chromium } = require('playwright');
const path = require('path');
(async () => {
const extensionPath = path.join(__dirname, 'CapSolver.Browser.Extension');
const browser = await chromium.launchPersistentContext('', {
headless: false,
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`
]
});
const page = await browser.newPage();
await page.goto('https://site.example');
// CAPTCHAのチェックボックスまたはフレームを検索し、それに応じて操作します
await page.waitForSelector('selector-for-captcha', { state: 'visible' });
await page.click('selector-for-captcha');
// 必要に応じて追加のステップを追加します
// ...
await browser.close();
})();
reCAPTCHAの場合、CapSolver APIを使用できます。以下にPythonとGoの例を示します。
import requests
import time
api_key = "YOUR_API_KEY"
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
site_url = "https://www.google.com/recaptcha/api2/demo"
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
resp = res.json()
task_id = resp.get("taskId")
if not task_id:
print("タスクの作成に失敗しました:", res.text)
return
print(f"タスクIDを取得しました: {task_id} / 結果を取得中...");
while True:
time.sleep(3)
payload = {"clientKey": api_key, "taskId": task_id}
res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
resp = res.json()
status = resp.get("status")
if status == "ready":
return resp.get("solution", {}).get('gRecaptchaResponse')
if status == "failed" or resp.get("errorId"):
print("解決に失敗しました!応答:", res.text)
return
token = capsolver()
print(token)
package main
import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"time"
)
type capSolverResponse struct {
ErrorId int32 `json:"errorId"`
ErrorCode string `json:"errorCode"`
ErrorDescription string `json:"errorDescription"`
TaskId string `json:"taskId"`
Status string `json:"status"`
Solution map[string]any `json:"solution"`
}
func capSolver(ctx context.Context, apiKey string, taskData map[string]any) (*capSolverResponse, error) {
uri := "https://api.capsolver.com/createTask"
res, err := request(ctx, uri, map[string]any{
"clientKey": apiKey,
"task": taskData,
})
if err != nil {
return nil, err
}
if res.ErrorId == 1 {
return nil, errors.New(res.ErrorDescription)
}
uri = "https://api.capsolver.com/getTaskResult"
for {
select {
case <-ctx.Done():
return res, errors.New("solve timeout")
case <-time.After(time.Second):
break
}
res, err = request(ctx, uri, map[string]any{
"clientKey": apiKey,
"taskId": res.TaskId,
})
if err != nil {
return nil, err
}
if res.ErrorId == 1 {
return nil, errors.New(res.ErrorDescription)
}
if res.Status == "ready" {
return res, err
}
}
}
func request(ctx context.Context, uri string, payload interface{}) (*capSolverResponse, error) {
payloadBytes, err := json.Marshal(payload)
if err != nil {
return nil, err
}
req, err := http.NewRequestWithContext(ctx, "POST", uri, bytes.NewReader(payloadBytes))
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
responseData, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
capResponse := &capSolverResponse{}
err = json.Unmarshal(responseData, capResponse)
if err != nil {
return nil, err
}
return capResponse, nil
}
func main() {
apikey := "YOUR_API_KEY"
ctx, cancel := context.WithTimeout(context.Background(), time.Second*120)
defer cancel()
res, err := capSolver(ctx, apikey, map[string]any{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": "https://www.google.com/recaptcha/api2/demo",
"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
})
if err != nil {
panic(err)
}
fmt.Println(res.Solution["gRecaptchaResponse"])
}
PlaywrightとCapSolverを使用することで、CAPTCHAの自動解決が可能になり、ウェブスクレイピングや自動化タスクがより効率的になります。CAPTCHAやreCAPTCHAに関わる場合でも、ここに示した方法はこれらのチャレンジを克服する堅牢なソリューションを提供します。
CAPTCHAをプログラムで解くことは、ウェブサイトの利用規約、適用可能な地域の法律、および自動化の使用方法によって合法かどうかが異なります。CapSolver自体は、テスト、QA自動化、アクセシビリティ、および認可されたデータ収集などの正当な使用ケースを目的とした中立的なツールです。あらゆるCAPTCHA解決ソリューションを展開する前に、ターゲットウェブサイトからの許可を確保し、関連する規制に準拠していることを確認してください。
CapSolverは、以下を含む幅広い現代のCAPTCHAシステムをサポートしています:
ブラウザ拡張機能(Playwright、Puppeteerなど)とバックエンド自動化のためのAPIベースのソリューションの両方でサポートされています。
CapSolverブラウザ拡張機能を使用する際のシナリオ:
CapSolver APIを使用する際のシナリオ:
多くの本番環境では、シナリオに応じて両方のアプローチを組み合わせて使用することがあります。
CapSolverは高い成功確率と低遅延を最適化しています。ほとんどの場合、reCAPTCHA v2のチャレンジは数秒以内で解決されます。ネットワーク状況やタスクの複雑さに応じて異なります。大規模な自動化には、CapSolverは並列処理と安定したスループットをサポートしており、企業向けのスクレイピングやテストワークフローに適しています。
「reCAPTCHA 無効なサイトキー」や「無効なreCAPTCHAトークン」のエラーに直面していますか?一般的な原因、ステップバイステップの修正手順、トラブルシューティングのヒントを確認してください。reCAPTCHAの検証失敗の問題を解決する。reCAPTCHAの検証失敗を修正する方法を学びましょう。もう一度試してください。

PythonとAPIを使用してreCAPTCHA v2を解決する方法を学びましょう。この包括的なガイドでは、プロキシとプロキシレスな方法をカバーし、自動化に使用可能な本番環境対応のコードを提供しています。
