CAPSOLVER
ブログ
AWSキャプチャ/チャレンジをPythonで解決する方法

AWSキャプチャ/チャレンジのPythonでの解決方法

Logo of CapSolver

Sora Fujimoto

AI Solutions Architect

04-Dec-2025

はじめに

ウェブスクレイピングやオートメーションのタスクが、 seemingly insurmountable AWS WAF (Web Application Firewall) によってブロックされているのでは?これは多くの開発者にとって一般的な課題です。AWS WAFは、ウェブサイトを一般的なウェブの攻撃や悪意のあるボットから保護するための強力なセキュリティサービスです。トラフィックパターンを分析し、JavaScriptチャレンジ(202ステータスコードを返す)や複雑な画像キャプチャ(405ステータスコードを返す)などの方法で疑わしい活動を識別してブロックします。

ウェブサイトの保護には不可欠ですが、これらのセキュリティ対策は正当なオートメーションスクリプトにとって大きな障害となることがあります。幸い、適切なツールがあれば、これらの保護を効果的に回避できます。このガイドでは、Pythonと**CapSolver**を使用して、aws-waf-tokenを簡単に取得する方法について詳しく説明します。これにより、AWS WAF保護されたウェブサイトへのシームレスなアクセスが可能になります。

⚙️ 前提条件

開始する前に、次のツールと情報を用意してください。

  • 動作するプロキシ: AWS WAFを解決するには非常に重要です。IPの信頼性が低い場合にブロックされるのを避けるために、ISPまたは住宅用プロキシを使用することを強くお勧めします。
  • Pythonのインストール: システムにPythonがインストールされていることを確認してください。
  • CapSolver APIキー: ダッシュボードからAPIキーを取得する必要があります (サインアップ)。

🤖 ステップ1: 必要なPythonパッケージをインストールする

まず、HTTPリクエストを送信し、HTMLを解析するためのいくつかの重要なPythonライブラリをインストールする必要があります。ターミナルを開き、次のコマンドを実行してください:

bash Copy
pip install capsolver requests beautifulsoup4

👨‍💻 ステップ2: AWS WAFを解決するPythonコードを書く

CapSolverを使用してAWS WAFチャレンジやキャプチャを解決するための完全なPythonコードは以下の通りです。このコードは、CapSolver公式ドキュメントの最新の実践に基づいており、2つの最も一般的なブロックシナリオを自動的に処理する構造が洗練されています。

更新されたPythonコード

python Copy
import capsolver
import requests
from bs4 import BeautifulSoup
import re
from urllib.parse import urlparse

# -------------------これらの値を変更してください-------------------
# プロキシの詳細を http://username:password@ip:port の形式で指定してください
PROXY = "http://username:password@ip:port"
# AWS WAFを保護しているターゲットウェブサイトのURL
PAGE_URL = "https://www.your-aws-protected-website.com"
# CapSolverダッシュボードから取得したAPIキー
CAPSOLVER_API_KEY = "Your_API_KEY"
# ----------------------------------------------------------------

def solve_aws_waf(is_captcha_challenge, **kwargs):
    """
    CapSolverを使用してAWS WAFチャレンジまたはキャプチャを解決します。
    :param is_captcha_challenge: キャプチャ(405ステータス)の場合True、JavaScriptチャレンジ(202ステータス)の場合False
    :param kwargs: 解決タスクに必要なパラメータ
    :return: 解決結果オブジェクト、失敗時はNone
    """
    task_type = "AntiAwsWafTask" if is_captcha_challenge else "AntiAwsWafTaskProxyLess"
    print(f"'{task_type}'タスクを作成中...")
    
    task_payload = {
        "type": task_type,
        "websiteURL": PAGE_URL,
    }
    
    # チャレンジタイプに応じて特定のパラメータを追加
    if is_captcha_challenge:
        # キャプチャチャレンジの場合、awsKey、awsIv、awsContextが必要
        task_payload.update({
            "awsKey": kwargs.get("awsKey"),
            "awsIv": kwargs.get("awsIv"),
            "awsContext": kwargs.get("awsContext"),
            "awsChallengeJS": kwargs.get("awsChallengeJS"),
            "proxy": PROXY
        })
    else:
        # JavaScriptチャレンジの場合、awsChallengeJSのURLのみが必要
        task_payload["awsChallengeJS"] = kwargs.get("awsChallengeJS")

    try:
        solution = capsolver.solve(task_payload)
        if solution and solution.get("errorId", 0) == 0:
            print("解決結果を取得しました!")
            return solution
        else:
            error_desc = solution.get('errorDescription', '不明なエラー') if solution else '不明なエラー'
            print(f"タスクの解決に失敗しました: {error_desc}")
            return None
    except Exception as e:
        print(f"CapSolverの呼び出し中に例外が発生しました: {e}")
        return None

def main():
    """全体のプロセスを実行するメイン関数。"""
    capsolver.api_key = CAPSOLVER_API_KEY
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
    }

    print(f"{PAGE_URL}にアクセスを試みています")
    response = session.get(PAGE_URL, headers=headers)
    print(f"受信したステータスコード: {response.status_code}")

    solution = None
    
    # シナリオ1: AWS JavaScriptチャレンジ(ステータスコード202)を処理
    if response.status_code == 202:
        print("AWS JavaScriptチャレンジが検出されました。")
        soup = BeautifulSoup(response.content, 'html.parser')
        script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
        if script_tag:
            challenge_js_url = script_tag['src']
            print(f"チャレンジJSのURLが見つかりました: {challenge_js_url}")
            solution = solve_aws_waf(is_captcha_challenge=False, awsChallengeJS=challenge_js_url)
        else:
            print("エラー: AWSチャレンジスクリプトが見つかりませんでした。")

    # シナリオ2: AWSキャプチャ(ステータスコード405)を処理
    elif response.status_code == 405:
        print("AWSキャプチャが検出されました。")
        soup = BeautifulSoup(response.content, 'html.parser')
        script_tag = soup.find('script', {'src': re.compile(r'token\.awswaf\.com')})
        script_text_tag = soup.find('script', string=re.compile('.*key.*'))
        
        if script_tag and script_text_tag:
            challenge_js_url = script_tag['src']
            script_text = script_text_tag.string
            
            key = re.search(r'"key":"(.*?)"', script_text).group(1)
            iv = re.search(r'"iv":"(.*?)"', script_text).group(1)
            context = re.search(r'"context":"(.*?)"', script_text).group(1)
            
            print(f"抽出されたパラメータ: Key={key[:5]}..., IV={iv[:5]}..., Context={context[:5]}...")
            solution = solve_aws_waf(
                is_captcha_challenge=True,
                awsKey=key,
                awsIv=iv,
                awsContext=context,
                awsChallengeJS=challenge_js_url
            )
        else:
            print("エラー: ページからすべての必要なキャプチャパラメータを抽出できませんでした。")

    # 解決に成功した場合、クッキーを設定しリトライします
    if solution and solution.get("cookie"):
        aws_token = solution["cookie"]
        print(f"aws-waf-tokenを成功裏に取得しました: {aws_token[:30]}...")
        
        domain = f".{urlparse(PAGE_URL).netloc}"
        session.cookies.set("aws-waf-token", aws_token, domain=domain)
        
        print("クッキーを設定しました。リトライしています...")
        final_response = session.get(PAGE_URL, headers=headers)
        print(f"最終的なリクエストのステータスコード: {final_response.status_code}")
        
        if final_response.status_code == 200:
            print("AWS WAFを成功裏に回避しました!")
            # print(final_response.text) # ページの内容を確認するにはコメントを外してください
        else:
            print("クッキーを設定した後でもリクエストが失敗しました。トークンまたはプロキシを確認してください。")
    else:
        print("AWS WAFの回避に失敗しました。終了します。")

if __name__ == "__main__":
    main()

⚠️ 変更する必要がある重要な変数

コードを実行する前に、以下の変数を変更してください:

  • PROXY: このプロキシサーバーのアドレスと資格情報を置き換えてください。形式は http://username:password@ip:port です。
  • CAPSOLVER_API_KEY: CapSolverダッシュボード でAPIキーを取得し、プレースホルダーを置き換えてください。
  • PAGE_URL: AWS WAFで保護されているターゲットウェブサイトのURLに置き換えてください。

結論

CapSolverをPythonのオートメーションワークフローに統合することで、AWS WAFによってトリガーされるJavaScriptチャレンジとキャプチャを効果的に処理できます。このアプローチは、複雑な検証プロセスを単一のAPIコールに簡略化し、開発者は反ボット技術との継続的な戦いに時間を費やすことなく、コアビジネスロジックに集中できます。AWS WAFで保護されているサイトとやり取りする必要がある開発者にとって、これは非常に価値のある解決策です。

CapSolverアカウントにチャージする際、ボーナスコード CAPN を使用すると、毎回チャージに5%のボーナスが追加されます — 限度はなし。
今すぐCapSolverダッシュボードで利用してください

よくある質問(FAQ)

Q1: なぜプロキシを使用しなければならないのですか?
A1: AWS WAFはIPアドレスの動作を厳しく監視しています。データセンターからのリクエストや疑わしいIPアドレスは簡単にブロックされます。高品質な住宅用またはISPプロキシを使用することで、実際のユーザーのアクセス行動を模倣し、WAFを成功裏に回避するための重要な第一歩になります。

Q2: aws-waf-tokenの有効期限はどのくらいですか?
A2: このトークンの有効期限は通常非常に短く、数分程度です。トークンが期限切れになると、新しいトークンを取得するために検証プロセスを再実行する必要があります。アプリケーション内でトークンのリフレッシュロジックを設計することが重要です。

Q3: AntiAwsWafTaskAntiAwsWafTaskProxyLessの違いは何ですか?
A3: AntiAwsWafTaskは、405ステータスコードで見られるAWSキャプチャを解決するために使用され、通常フルブラウザ環境が必要で、プロキシを提供する必要があります。一方、AntiAwsWafTaskProxyLessは、202ステータスコードで見られるより単純なJavaScriptチャレンジを解決するために使用され、CapSolverのサーバーで解決され、プロキシを提供する必要がありません。コードはステータスコードに基づいて自動的に適切なタスクタイプを選択します。

Q4: この方法はすべてのAWS WAFを使用するウェブサイトで動作しますか?
A4: この方法はほとんどの標準的なAWS WAF設定で効果的です。ただし、ウェブサイトの所有者はWAFルールをカスタマイズすることができ、回避の難易度を高めることができます。問題に遭遇した場合は、CapSolverのドキュメントまたはサポートを参照してください。異なるチャレンジには異なる戦略が必要になる場合があります。

コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

AWSキャプチャ/チャレンジの解決方法 Pythonで
AWSキャプチャ/チャレンジのPythonでの解決方法

PythonとCapSolverを使用したAWS WAFの課題の処理に関する実用的なガイド、保護されたウェブサイトへのスムーズなアクセスを可能にします

AWS WAF
Logo of CapSolver

Sora Fujimoto

04-Dec-2025

AWS (アマゾン) WAF キャプチャトークンの解決方法
AWS WAF CAPTCHA トークンの解決方法

このブログでは、CapSolverを使用して、AWS WAF CAPTCHAを高速で、低コストで、簡単に解決する方法を説明しています。

AWS WAF
Logo of CapSolver

Sora Fujimoto

01-Dec-2025

AWSのCaptchaをPuppeteer [Javascript]で解く方法
AWSキャプチャをPuppeteerで[JavaScript]を使用してCapSolver拡張機能を使って解決する方法

PuppeteerとCapsolverエクステンションを使用してAWSキャプチャをスムーズに解決する方法を学び、キャプチャの解決方法を効果的に設定および自動化するための詳細なガイド

AWS WAF
Logo of CapSolver

Sora Fujimoto

25-Nov-2025

エンタープライズオートメーションとウェブスクラピングのためのトップ5 AWS WAF チャレンジソルバーツール
エンタープライズオートメーションとウェブスクレイピング向けのトップ5 AWS WAF チャレンジソルバー ツール

AWS WAFを回避するシームレスなウェブスクレイピングおよびエンタープライズ自動化のための上位5つのチャレンジソルバーツールを発見。AWS WAFを回避する最適なソリューションを検索。

AWS WAF
Logo of CapSolver

Sora Fujimoto

13-Nov-2025

AWS WAF CAPTCHA ソルバー
AWS WAF CAPTCHAソルバー: トークン & 画像ソリューション for スクレイパー

ウェブスクリーピングや自動化におけるAWS WAF CAPTCHAチャレンジの解決方法を学ぶ。トークンベースおよび画像ベースのソリューション、APIとブラウザの統合、およびベストプラクティスに関する実践的なガイド。

AWS WAF
Logo of CapSolver

Sora Fujimoto

28-Oct-2025

自動解決 AWS WAF CAPTCHA
AWS WAF CAPTCHAの自動解決:ブラウザまたはAPI統合を用いて

ブラウザ拡張機能とAPI統合を使用してAWS WAF CAPTCHAを自動で解く方法を学びましょう。このガイドでは画像認識、トークンベースのチャレンジ、およびシームレスな自動化とウェブスクリーピングのためのCapSolverソリューションをカバーしています。

AWS WAF
Logo of CapSolver

Sora Fujimoto

23-Oct-2025