Python、Java、C++ を使用した reCAPTCHA の解決
Sora Fujimoto
AI Solutions Architect
25-Oct-2024
reCAPTCHAを使い始めた当初、それは諸刃の剣だと感じました。一方では、ボットをフィルタリングするのに役立ちますが、一方で、正当な自動化プロジェクトにとって大きな障害となる可能性があります。そこでこの記事では、Python、Java、C++という3つの強力なプログラミング言語を使ってreCAPTCHAを解決する方法を紹介します。各言語はreCAPTCHAの課題に対処するために独自の利点があり、プロジェクトのニーズに応じて柔軟性をもたらします。まずは、CAPTCHAとreCAPTCHAとは何か、そしてWebセキュリティにおける重要性について理解することから始めましょう。
CAPTCHAとは?
最も基本的な概念から始めましょう。CAPTCHAとは、「Completely Automated Public Turing test to tell Computers and Humans Apart」の略で、人間のユーザーとボットを区別するための一般的な方法です。これは、ユーザーに人間にとっては簡単だが機械にとっては難しいタスクを解くことを要求することで、ウェブサイトが自動化された攻撃、スパム、または悪用を避けるのに役立ちます。これは、歪んだテキストの認識、特定のオブジェクトを含む画像の選択、またはロジックパズルの解決などになる可能性があります。
reCAPTCHAとは?
reCAPTCHAはGoogleによって開発されたサービスで、人間のユーザーとボットを区別することで、ウェブサイトをスパムや不正使用から保護するのに役立ちます。reCAPTCHAは時代とともに進化し、それぞれが特定の機能を提供するさまざまなバージョンが提供されています。
-
reCAPTCHA v2: これは最も一般的な形式で、ユーザーはチェックボックスをクリックする("私はロボットではありません")または画像を選択するなどのタスクを解決します。これはよりユーザーフレンドリーですが、リスク要因に基づいてチャレンジが表示される可能性があります。
-
reCAPTCHA v3: このバージョンは、ユーザーを邪魔することなく、バックグラウンドで目に見えないように動作します。ユーザーの行動に基づいてリスクスコア(0.0〜1.0)を割り当てます。リスクの低いユーザーは、チャレンジが表示されることなく通過しますが、疑わしいアクティビティは検証ステップをトリガーする可能性があります。
-
reCAPTCHA Enterprise: エンタープライズレベルの保護のために設計されたこのバージョンは、大企業向けのセキュリティ機能を強化しています。高度な分析、機械学習モデル、リスクベースの評価を組み合わせることで、ビジネスセキュリティニーズに合わせて高度にカスタマイズされた、高リスクトランザクションに合わせたセキュリティを提供します。
これらのバージョンのそれぞれは、ボットと攻撃の巧妙化に合わせて、正当なユーザーにとっての摩擦を最小限に抑えながら、最適なセキュリティを提供することを目指しています。
- reCAPTCHA v2 デモ
reCAPTCHA v2 デモを見る- reCAPTCHA v3 デモ
reCAPTCHA v3 デモを見る- reCAPTCHA Enterprise デモ
reCAPTCHA Enterpriseの詳細を見る
Python、Java、C++でのreCAPTCHAの解決方法
各言語は、reCAPTCHAの課題に対処する際に独自の強みを提供します。
-
Pythonは、シンプルさと、Web自動化やデータスクレイピングを容易にする大規模なライブラリセットで知られています。SeleniumやPlaywrightなどのライブラリを使用することで、ブラウザタスクを簡単に自動化し、適切なツールを使ってCAPTCHAを回避することができます。
-
Javaは、エンタープライズレベルのアプリケーションやクロスプラットフォームプロジェクトに適しています。Selenium WebDriverなどのマルチスレッド機能やフレームワークにより、スケーラブルなシステムでreCAPTCHAをスムーズに処理することができます。
-
**C++**はパフォーマンスの利点があり、速度と低レイテンシが求められるシステムに最適です。自動化にはあまり使われていませんが、他のツールと統合して高性能環境でreCAPTCHAの課題を解決することができます。
CapSolverの紹介
先に進むと、進化するアルゴリズムや複雑さのために、reCAPTCHAの課題を解決することが難しくなることに気づくでしょう。そこで役立つのがCapSolverです。これは、reCAPTCHA v2、reCAPTCHA v3など、複数のCAPTCHAタイプを処理し、高い精度でreCAPTCHAの解決プロセスを自動化する専門サービスです。CapSolverをPython、Java、またはC++プロジェクトに統合することで、CAPTCHA解決の複雑さを専用のサービスにオフロードし、スクリプトをスムーズかつ効率的に実行することができます。
次に、各言語のサンプルコードと、CapSolverをプロジェクトに迅速に統合する方法について説明します...
ボーナスコード
トップのCAPTCHAソリューションのボーナスコードを手に入れましょう。CapSolver:WEBS。コードを適用すると、チャージごとに追加で5%のボーナスがもらえます。無制限。
Pythonを使ったreCAPTCHAの解決方法
事前準備
ステップ1. サイトキーの取得
V2とV3の両方で、ブラウザのリクエストログで/recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf
というリクエストを検索できます。ここでk=
は、私たちが必要とするキー値です。
ステップ2. V2とV3の区別
V2とV3では、処理方法が異なります。V2では画像認識を使用して回答を選択する必要がありますが、V3は比較的目立ちません。ただし、V3では検証時にアクションを提供する必要があります。前に取得したキー値に基づいて、レスポンスページを検索すると、ページ内にアクション値が見つかります。
ステップ3. CapSolverサービスの呼び出し
reCAPTCHAのバージョンの区別
- ブラウザのリクエストログでは、V2の場合、
/recaptcha/api2/reload
リクエストの後、通常は/recaptcha/api2/userverify
リクエストが必要になり、通過トークンを取得できます。 - V3の場合、
/recaptcha/api2/reload
リクエストで直接通過トークンを取得できます。
CapSolver API呼び出しの完全な例
- Python reCAPTCHA V2
python
# pip install requests
import requests
import time
# TODO: 設定
api_key = "YOUR_API_KEY" # CapSolverのAPIキー
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # ターゲットサイトのサイトキー
site_url = "https://www.google.com/recaptcha/api2/demo" # ターゲットサイトのページURL
# site_key = "6LelzS8UAAAAAGSL60ADV5rcEtK0x0lRsHmrtm62"
# site_url = "https://mybaragar.com/index.cfm?event=page.SchoolLocatorPublic&DistrictCode=BC45"
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"taskIdを取得しました: {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)
- Python reCAPTCHA V3
python
# pip install requests
import requests
import time
# TODO: 設定
api_key = "YOUR_API_KEY" # CapSolverのAPIキー
site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf" # ターゲットサイトのサイトキー
site_url = "https://antcpt.com/score_detector/" # ターゲットサイトのページURL
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV3TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url,
"pageAction": "homepage",
}
}
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"taskIdを取得しました: {task_id} / 結果を取得中...")
while True:
time.sleep(1) # 遅延
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
# スコアの検証
def score_detector(token):
headers = {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "fr-CH,fr;q=0.9",
"content-type": "application/json",
"origin": "https://antcpt.com",
"priority": "u=1, i",
"referer": "https://antcpt.com/score_detector/",
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"x-requested-with": "XMLHttpRequest"
}
url = "https://antcpt.com/score_detector/verify.php"
data = {
"g-recaptcha-response": token
}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, data=data)
print(response.json())
print(response)
token = capsolver()
print(token)
...
...
{
'success': True,
'challenge_ts': '2024-07-19T10:50:56Z',
'hostname': 'antcpt.com',
'score': 0.7,
'action': 'homepage'
}
Javaを使ったreCAPTCHAの解決方法
事前準備
コードに進む前に、このチュートリアルを成功させるために、次の事前準備をしておく必要があります。
- Node.jsとnpm: Node.js(JavaScriptランタイム)とnpm(Node Package Manager)を使用して、プロジェクトの依存関係を管理します。Node.jsがインストールされていない場合は、Node.jsの公式ウェブサイトからダウンロードできます。
- CapSolver APIキー: reCAPTCHAの課題を解決するには、CapSolverなどのサービスへのアクセスが必要です。このサービスは、CAPTCHAの課題をプログラムで解決することに特化しています。CapSolverにサインアップしてAPIキーを取得し、ソリューションに統合できるようにしてください。
これらの事前準備を完了したら、環境をセットアップして、JavaScriptとCapSolverでreCAPTCHAの課題を解決することができます。
ステップ1. サイトキーの取得
- ブラウザのリクエストログで、
/recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
というリクエストを検索します。ここでk=
の後の値が、必要なサイトキーです。または、CapSolver拡張機能を使用して、recaptchaを解決するためのすべてのパラメータを見つけることができます。 - URLは、reCAPTCHA V2をトリガーするページのアドレスです。
ステップ2. requestsライブラリのインストール
bash
pip install requests
ステップ3. 例コード
python
import requests
import time
from DrissionPage import ChromiumPage
# ChromiumPageのインスタンスを作成
page = ChromiumPage()
# reCAPTCHAをトリガーする例ページにアクセス
page.get("https://www.google.com/recaptcha/api2/demo")
# TODO: 設定
api_key = "CapSolverのAPIキー" # CapSolverのAPIキー
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" # ターゲットサイトのサイトキー
site_url = "https://www.google.com/recaptcha/api2/demo" # ターゲットサイトのページURL
def capsolver():
payload = {
"clientKey": api_key,
"task": {
"type": 'ReCaptchaV2TaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
# CapSolverにタスクを作成するリクエストを送信
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"taskIdを取得しました: {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
def check():
# reCAPTCHAの解決策を取得
token = capsolver()
# reCAPTCHAのレスポンス値を設定
page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
# 成功コールバック関数を呼び出す
page.run_js(f'onSuccess("{token}")')
# フォームを送信
page.ele('x://input[@id="recaptcha-demo-submit"]').click()
if __name__ == '__main__':
check()
C++を使ったreCAPTCHAの解決方法
事前準備
始める前に、次のライブラリがインストールされていることを確認してください。
- cpr: C++のHTTPライブラリです。
- jsoncpp: C++のJSONパーシングライブラリです。
vcpkgを使用してインストールできます。
bash
vcpkg install cpr jsoncpp
ステップ1. プロジェクトの設定
新しいC++プロジェクトを作成し、cpr
とjsoncpp
に必要なヘッダーを含めます。
cpp
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
ステップ2. タスクの作成と結果の取得のための関数の定義
2つの主要な関数を定義します。createTask
とgetTaskResult
です。
- createTask: この関数は、reCAPTCHAタスクを作成します。
- getTaskResult: この関数は、作成されたタスクの結果を取得します。
完全なコードは以下のとおりです。
cpp
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>
std::string createTask(const std::string& apiKey, const std::string& websiteURL, const std::string& websiteKey) {
Json::Value requestBody;
requestBody["clientKey"] = apiKey;
requestBody["task"]["type"] = "ReCaptchaV2Task";
requestBody["task"]["websiteURL"] = websiteURL;
requestBody["task"]["websiteKey"] = websiteKey;
Json::StreamWriterBuilder writer;
std::string requestBodyStr = Json::writeString(writer, requestBody);
cpr::Response response = cpr::Post(
cpr::Url{"https://api.capsolver.com/createTask"},
cpr::Body{requestBodyStr},
cpr::Header{{"Content-Type", "application/json"}}
);
Json::CharReaderBuilder reader;
Json::Value responseBody;
std::string errs;
std::istringstream s(response.text);
std::string taskId;
if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
if (responseBody["errorId"].asInt() == 0) {
taskId = responseBody["taskId"].asString();
} else {
std::cerr << "エラー: " << responseBody["errorCode"].asString() << std::endl;
}
} else {
std::cerr << "レスポンスの解析に失敗しました: " << errs << std::endl;
}
return taskId;
}
std::string getTaskResult(const std::string& apiKey, const std::string& taskId) {
Json::Value requestBody;
requestBody["clientKey"] = apiKey;
requestBody["taskId"] = taskId;
Json::StreamWriterBuilder writer;
std::string requestBodyStr = Json::writeString(writer, requestBody);
while (true) {
cpr::Response response = cpr::Post(
cpr::Url{"https://api.capsolver.com/getTaskResult"},
cpr::Body{requestBodyStr},
cpr::Header{{"Content-Type", "application/json"}}
);
Json::CharReaderBuilder reader;
Json::Value responseBody;
std::string errs;
std::istringstream s(response.text);
if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
if (responseBody["status"].asString() == "ready") {
return responseBody["solution"]["gRecaptchaResponse"].asString();
} else if (responseBody["status"].asString() == "processing") {
std::cout << "タスクはまだ処理中です。5秒待ちます..." << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(5));
} else {
std::cerr << "エラー: " << responseBody["errorCode"].asString() << std::endl;
break;
}
} else {
std::cerr << "レスポンスの解析に失敗しました: " << errs << std::endl;
break;
}
}
return "";
}
int main() {
std::string apiKey = "YOUR_API_KEY";
std::string websiteURL = "https://example.com";
std::string websiteKey = "SITE_KEY";
std::string taskId = createTask(apiKey, websiteURL, websiteKey);
if (!taskId.empty()) {
std::cout << "タスクが正常に作成されました。タスクID: " << taskId << std::endl;
std::string recaptchaResponse = getTaskResult(apiKey, taskId);
std::cout << "reCAPTCHAレスポンス: " << recaptchaResponse << std::endl;
} else {
std::cerr << "タスクの作成に失敗しました。" << std::endl;
}
return 0;
}
まとめ
まとめとして、CapSolverをプロジェクトに統合することで、reCAPTCHAの課題を処理することがはるかに簡単になったと言えるでしょう。V2であろうとV3であろうと、プロセスは簡単で、多くの時間を節約することができました。同様の課題に直面している場合は、CapSolverを試してみることを強くお勧めします。私にとってゲームチェンジャーとなりました。
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る
AI認識によるreCAPTCHAの解決 - 2025年
AIがreCAPTCHA解決、CapSolverのソリューション、そして2025年のCAPTCHAセキュリティの進化する状況をどのように変革しているかを調査する。
Sora Fujimoto
11-Nov-2024
Python、Java、C++ を使用した reCAPTCHA の解決
3つの強力なプログラミング言語(Python、Java、C++)を使ってreCAPTCHAを成功させる方法を1つのブログで知りたいですか?さあ、始めましょう!
Sora Fujimoto
25-Oct-2024
Rust を使用して reCAPTCHA v2 を解決する方法
Rust と Capsolver API を使用して reCaptcha v2 を解決する方法を学びましょう。このガイドでは、プロキシとプロキシレスの両方の方法を網羅し、Rust アプリケーションに reCaptcha v2 の解決を統合するためのステップバイステップの指示とコード例を提供します。
Sora Fujimoto
17-Oct-2024
Python で高スコアで reCAPTCHA v3 を解くためのガイド
このガイドでは、reCAPTCHA v3を高いスコアで解決するための効果的な戦略とPythonテクニックを紹介します。これにより、自動化タスクをスムーズに実行できます。
Sora Fujimoto
17-Sep-2024
Python でデータ抽出のために reCAPTCHA v2 ソリューションを統合する方法
Python で reCAPTCHA v2 ソリューションを統合してシームレスにデータ抽出する方法を学びましょう。reCAPTCHA バージョンを調べ、データ抽出を理解し、Capsolver を使用して reCAPTCHA v2 チャレンジの解決を自動化する簡単な例に従います。
Anh Tuan
10-Sep-2024
PythonとSeleniumを使用したreCAPTCHA v3 Enterprise Challengesの解決
PythonとSeleniumを使用して、人気のブラウザ自動化ツールであるreCAPTCHA v3 Enterpriseの課題を解決する方法。
Sora Fujimoto
04-Sep-2024