
Sora Fujimoto
AI Solutions Architect

Webスクレイピングを行う際に、遭遇する可能性のある一般的な障害の1つは、CAPTCHAチャレンジです。ウェブサイトはしばしば、ボットが自分のコンテンツにアクセスするのを防ぐためにCAPTCHAを使用します。CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)は、ユーザーが人間であり、自動化されたボットではないことを確認するために広く使用されている手法です。
このガイドでは、さまざまな種類のreCAPTCHAチャレンジ、ツールを使用してそれらを識別する方法、そして最後に、Pythonとスレッドを使用して複数のreCAPTCHAチャレンジを同時に解決する方法について説明します。
Webスクレイピングは、ウェブサイトからデータを抽出するプロセスです。これは、電子商取引ウェブサイトから価格を収集したり、ニュース記事を集めたり、さまざまなウェブソースから情報を集約したりするなどのタスクによく使用されます。スクレイピングには、ウェブサイトにHTTPリクエストを行い、応答からデータを解析することが含まれます。ただし、多くのウェブサイトでは、自動アクセスを防止するためにCAPTCHAを使用しています。
reCAPTCHA V2は、最も広く使用されているタイプのCAPTCHAであり、「私はロボットではありません」というラベルの付いた「チェックボックス」チャレンジとして表示されます。ユーザーに特定の画像を選択して、人間であることを確認するように求める場合があります。

reCAPTCHA V3は、バックグラウンドで動作し、ユーザーの操作をスコア付けして、ボットのような動作を検出します。このシステムは、ウェブサイトにスコアを提供することで、ユーザーエクスペリエンスを妨げるのを避けるように設計されており、これを使用してボットをブロックしたり、追加の検証手順を要求したりできます。
非表示のreCAPTCHAは、reCAPTCHA v2のよりユーザーフレンドリーなバージョンであり、システムがボットのような動作を疑う場合にのみ、チャレンジが表示されます。

ウェブサイトで使用されているCAPTCHAの種類を特定するには、次のツールを使用できます。
Capsolverは、プログラムでCAPTCHAチャレンジを解決できるサービスです。CAPTCHAパラメーターを検出するには:

Capsolverをセットアップしたら、次の手順に従ってCAPTCHAパラメーターを検出します。
Capsolver Captcha Detectorは、reCAPTCHAsに関する詳細な情報を返すことができます。

reCAPTCHAのキーパラメーター:
Website URLSite KeypageActionisInvisibleisEnterpriseisSRequiredisReCaptchaV3API Domainこれらのパラメーターが検出されると、CapsolverはCAPTCHAをサービスに送信するために必要なすべての詳細を含むJSONオブジェクトを返します。

Webスクレイピングプロジェクトに取り組んでいる場合、特に複数のCAPTCHAを同時に解決する必要がある場合、CAPTCHAの解決には時間がかかる可能性があります。Pythonを使用して複数のreCAPTCHAチャレンジを同時に解決する自動化方法を以下に示します。
import capsolver
import threading
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL = "PAGE_URL"
PAGE_KEY = "PAGE_SITE_KEY"
def solve_recaptcha_v2():
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": PAGE_KEY,
})
return solution
def solve_recaptcha_task(result_list, index):
result = solve_recaptcha_v2()
result_list[index] = result
def solve_multiple_recaptchas(num_tasks):
threads = []
results = [None] * num_tasks
for i in range(num_tasks):
thread = threading.Thread(target=solve_recaptcha_task, args=(results, i))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return results
def main():
num_tasks = 10 # 同時タスクの数
print(f"Solving {num_tasks} reCaptcha v2 tasks simultaneously")
solutions = solve_multiple_recaptchas(num_tasks)
for i, solution in enumerate(solutions):
print(f"Solution {i+1}: {solution}")
if __name__ == "__main__":
main()
reCAPTCHA v3を解決するプロセスはv2と非常によく似ていますが、CAPTCHAの種類を適切に調整する必要があります。
```python
import capsolver
import threading
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL = "PAGE_URL"
PAGE_KEY = "PAGE_SITE_KEY"
def solve_recaptcha_v3():
solution = capsolver.solve({
"type": "ReCaptchaV3TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": PAGE_KEY,
})
return solution
def solve_recaptcha_task(result_list, index):
result = solve_recaptcha_v3()
result_list[index] = result
def solve_multiple_recaptchas(num_tasks):
threads = []
results = [None] * num_tasks
for i in range(num_tasks):
thread = threading.Thread(target=solve_recaptcha_task, args=(results, i))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return results
def main():
num_tasks = 10 # 同時タスクの数
print(f"Solving {num_tasks} reCaptcha v3 tasks simultaneously")
solutions = solve_multiple_recaptchas(num_tasks)
for i, solution in enumerate(solutions):
print(f"Solution {i+1}: {solution}")
if __name__ == "__main__":
main()
reCAPTCHA v3を解決するプロセスはv2と非常によく似ていますが、CAPTCHAの種類を適切に調整する必要があります。
```python
import capsolver
import threading
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL = "PAGE_URL"
PAGE_KEY = "PAGE_SITE_KEY"
def solve_recaptcha_v3():
solution = capsolver.solve({
"type": "ReCaptchaV3TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": PAGE_KEY,
})
return solution
def solve_recaptcha_task(result_list, index):
result = solve_recaptcha_v3()
result_list[index] = result
def solve_multiple_recaptchas(num_tasks):
threads = []
results = [None] * num_tasks
for i in range(num_tasks):
thread = threading.Thread(target=solve_recaptcha_task, args=(results, i))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return results
def main():
num_tasks = 10 # 同時タスクの数
print(f"Solving {num_tasks} reCaptcha v3 tasks simultaneously")
solutions = solve_multiple_recaptchas(num_tasks)
for i, solution in enumerate(solutions):
print(f"Solution {i+1}: {solution}")
if __name__ == "__main__":
main()
import capsolver
# 環境変数を機密情報に使用することを検討してください
capsolver.api_key = "Your Capsolver API Key"
PAGE_URL_V2 = "PAGE_URL"
PAGE_KEY_V2 = "PAGE_SITE_KEY"
PAGE_URL_V3 = "PAGE_URL"
PAGE_KEY_V3 = "PAGE_SITE_KEY"
def solve_recaptcha_v2(url, key):
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": url,
"websiteKey": key,
})
return solution
def solve_recaptcha_v3(url, key):
solution = capsolver.solve({
"type": "ReCaptchaV3TaskProxyless",
"websiteURL": url,
"websiteKey": key,
"minScore": 0.5 # 必要に応じて最小スコアを調整します
})
return solution
def main():
print("Solving reCaptcha v2")
solution_v2 = solve_recaptcha_v2(PAGE_URL_V2, PAGE_KEY_V2)
print("Solution (v2): ", solution_v2)
print("Solving reCaptcha v3")
solution_v3 = solve_recaptcha_v3(PAGE_URL_V3, PAGE_KEY_V3)
print("Solution (v3): ", solution_v3)
if __name__ == "__main__":
main()
トップCAPTCHAソリューションのボーナスコードを請求してください。CapSolver: scrape。これを引き換えると、チャージごとに5%のボーナスが追加されます。無制限

詳細については、このブログをご覧ください。
複数のCAPTCHAチャレンジを処理することは、特にウェブサイトがセキュリティ対策を強化するにつれて、Webスクレイピングに取り組んでいる人にとって重要なスキルです。CapsolverなどのツールとPythonのスレッド機能を使用することで、CAPTCHAチャレンジを効率的に自動化し、プロジェクトのスムーズなスクレイピングプロセスを保証できます。
Cloudflareエラー1020 アクセスが拒否されましたとは何か、Webアプリケーションファイアウォールとボット検出の仕組み、そして開発者が正当な自動化ワークフローで誤検出を減らす方法を学びましょう。

CapSolver n8nテンプレートを使用して、AWS WAFで保護された製品ページをモニタリングし、チャレンジを解決し、価格を抽出し、変化を比較し、自動でアラートをトリガーする方法を学びましょう。

SEOにおけるAIエージェントがキーワードリサーチ、競合分析、データ収集を自動化する方法を学びましょう — そして、CapSolverを使ってあなたのパイプラインでCAPTCHAのチャレンジを処理する方法を学びましょう。
