CAPSOLVER
ブログ
ウェブスクレイピング時にスラップリングとキャップソルバーを使ってCAPTCHAを解く方法

ScraplingとCapSolverを用いたウェブスクラッピング時のキャプチャの解き方

Logo of CapSolver

Sora Fujimoto

AI Solutions Architect

05-Dec-2025

重要なポイント

  • Scraplingは、組み込みのアンチボット機能と適応型要素トラッキングを備えた強力なPythonのウェブスクレイピングライブラリです
  • CapSolverは、ReCaptcha v2、v3、Cloudflare Turnstileのキャプチャを自動的に解決し、高速な解決時間(1〜20秒)を提供します
  • ScraplingとCapSolverを組み合わせることで、ほとんどのキャプチャ保護サイトを処理できる堅牢なスクレイピングソリューションが構築できます
  • StealthyFetcherは、基本的なHTTPリクエストでは不十分な場合にブラウザレベルのアンチ検出機能を追加します
  • すべてのキャプチャタイプは、同じCapSolverワークフローを使用します:タスクの作成 → 結果のポーリング → トークンのインジェクト
  • プロダクションコードにはエラー処理、レートリミット、およびサイトの利用規約を尊重する必要があります

導入

ウェブスクレイピングは、データ収集、市場調査、競合分析において不可欠なツールとなっています。しかし、スクレイピング技術が進化するにつれて、ウェブサイトがデータを保護するために使用する防御も進化しています。スクレイパーが直面する最も一般的な障壁はキャプチャです。これは、人間とボットを区別するように設計された面倒なチャレンジです。

一度でも「人間であることを確認してください」というメッセージに遭遇したことがあるなら、その煩わしさを知っているでしょう。幸いなことに、強力な組み合わせがあります:Scraplingによる知的なウェブスクレイピングと、CapSolverによる自動キャプチャ解決です。

このガイドでは、これらのツールを統合してキャプチャ保護サイトを成功裏にスクレイピングするためのすべての手順を紹介します。GoogleのReCaptcha v2、非表示のReCaptcha v3、CloudflareのTurnstileに対応しています。


Scraplingとは?

Scraplingは、"サイトの変更から学び、それに合わせて進化する最初の適応型スクレイピングライブラリ"と自己紹介する現代的なPythonウェブスクレイピングライブラリです。データ抽出を簡単にし、強力なアンチボット機能を提供しています。

主な特徴

  • 適応型要素トラッキング:スマートな類似性アルゴリズムを使用して、サイトの再デザイン後でもコンテンツを再配置できます
  • 複数のフェッチャー方法:TLSファイントラッキングの偽装を伴うHTTPリクエスト、ブラウザ自動化、ステルスモード
  • アンチボット回避:修正されたFirefoxとファイントラッキングスプーフィングを使用して、Cloudflareやその他のアンチボットシステムを回避するサポートを備えています
  • 高パフォーマンス:テキスト抽出のベンチマークでは、5000のネストされた要素で約2ms、多くの代替品よりもはるかに高速です
  • 柔軟な選択:CSSセレクター、XPath、BeautifulSoupスタイルのfind操作、テキストベースの検索
  • 非同期サポート:非同期/awaitサポートを完全に備え、並列スクレイピング操作に対応しています

インストール

基本的なパーサー機能をインストールするには:

bash Copy
pip install scrapling

ブラウザ自動化を含むすべての機能をインストールするには:

bash Copy
pip install "scrapling[fetchers]"
scrapling install

AI機能を含むすべての機能をインストールするには:

bash Copy
pip install "scrapling[all]"
scrapling install

基本的な使用方法

Scraplingはクラスメソッドを使用してHTTPリクエストを行います:

python Copy
from scrapling import Fetcher

# GETリクエスト
response = Fetcher.get("https://example.com")

# データを伴うPOSTリクエスト
response = Fetcher.post("https://example.com/api", data={"key": "value"})

# レスポンスにアクセス
print(response.status)       # HTTPステータスコード
print(response.body)         # ラウバイト
print(response.body.decode()) # デコードされたテキスト

CapSolverとは?

CapSolverは、さまざまなタイプのキャプチャを自動的に解決するためのキャプチャソルビングサービスです。高度なAIを用いて、あらゆるプログラミング言語やスクレイピングフレームワークとシームレスに統合するシンプルなAPIを提供します。

自動化予算を即座に増やす!
CapSolverアカウントにチャージする際、ボーナスコードSCRAPLINGを使用すると、毎回チャージに6%のボーナスが追加されます — Scrapling統合ユーザー向け特別コードです。
今すぐCapSolverダッシュボードで利用してください。

対応キャプチャタイプ

  • ReCaptcha v2(チェックボックスおよび非表示)
  • ReCaptcha v3(スコアベース)
  • ReCaptcha Enterprise(v2およびv3の両方)
  • Cloudflare Turnstile
  • AWS WAFキャプチャ
  • その他にも多くのタイプがあります...

APIキーの取得

  1. CapSolverに登録してください
  2. ダッシュボードに移動してください
  3. アカウント設定からAPIキーをコピーしてください
  4. アカウントに資金を追加してください(解決ごとの課金)

APIエンドポイント

CapSolverは2つの主要なエンドポイントを使用します:

  • タスク作成: POST https://api.capsolver.com/createTask
  • 結果取得: POST https://api.capsolver.com/getTaskResult

CapSolverヘルパ関数の設定

特定のキャプチャタイプに進む前に、CapSolver APIワークフローを処理する再利用可能なヘルパ関数を作成しましょう:

python Copy
import requests
import time

CAPSOLVER_API_KEY = "YOUR_API_KEY"

def solve_captcha(task_type, website_url, website_key, **kwargs):
    """
    CapSolver APIを使用した汎用的なキャプチャソルバー。

    引数:
        task_type: キャプチャタスクのタイプ(例: "ReCaptchaV2TaskProxyLess")
        website_url: キャプチャが表示されているページのURL
        website_key: キャプチャのサイトキー
        **kwargs: キャプチャタイプに特有の追加パラメータ

    戻り値:
        dict: トークンとその他のデータを含む解決結果
    """
    payload = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": {
            "type": task_type,
            "websiteURL": website_url,
            "websiteKey": website_key,
            **kwargs
        }
    }

    # タスクの作成
    response = requests.post(
        "https://api.capsolver.com/createTask",
        json=payload
    )
    result = response.json()

    if result.get("errorId") != 0:
        raise Exception(f"タスク作成に失敗しました: {result.get('errorDescription')}")

    task_id = result.get("taskId")
    print(f"タスク作成: {task_id}")

    # 結果のポーリング
    max_attempts = 60  # 最大2分間のポーリング
    for attempt in range(max_attempts):
        time.sleep(2)

        response = requests.post(
            "https://api.capsolver.com/getTaskResult",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "taskId": task_id
            }
        )
        result = response.json()

        if result.get("status") == "ready":
            print(f"キャプチャが{(attempt + 1) * 2}秒で解決されました")
            return result.get("solution")

        if result.get("errorId") != 0:
            raise Exception(f"エラー: {result.get('errorDescription')}")

        print(f"待機中...(試行回数 {attempt + 1})")

    raise Exception("タイムアウト: キャプチャの解決に時間がかかりすぎました")

この関数は、タスクの作成、結果のポーリング、解決結果の返却をすべて処理します。このガイドの残りの部分でもこの関数を使用します。


Scrapling + CapSolverでReCaptcha v2を解決する

ReCaptcha v2は、古典的な「私はロボットではありません」チェックボックスキャプチャです。トリガーされると、ユーザーに画像内のオブジェクトを識別するよう求められます(信号機、歩道の横断歩道など)。スクレイパーにとっては、これをプログラム的に解決する必要があります。

ReCaptcha v2の仕組み

  1. ウェブサイトは一意のサイトキーを備えたReCaptchaスクリプトを読み込みます
  2. 送信時にスクリプトはg-recaptcha-responseトークンを生成します
  3. ウェブサイトはこのトークンをGoogleに送信して検証します
  4. Googleはキャプチャが正しく解決されたかを確認します

サイトキーの見つけ方

サイトキーは通常、ページHTMLにあります:

html Copy
<div class="g-recaptcha" data-sitekey="6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></div>

またはスクリプトタグ内にあります:

html Copy
<script src="https://www.google.com/recaptcha/api.js?render=6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"></script>

実装

python Copy
from scrapling import Fetcher

def scrape_with_recaptcha_v2(target_url, site_key, form_url=None):
    """
    ReCaptcha v2で保護されたページをスクレイピングします。

    引数:
        target_url: キャプチャが表示されているURL
        site_key: ReCaptchaのサイトキー
        form_url: フォームを送信するURL(デフォルトはtarget_url)

    戻り値:
        キャプチャで保護されたページからのレスポンス
    """
    # CapSolverを使用してキャプチャを解決
    print("ReCaptcha v2を解決中...")
    solution = solve_captcha(
        task_type="ReCaptchaV2TaskProxyLess",
        website_url=target_url,
        website_key=site_key
    )

    captcha_token = solution["gRecaptchaResponse"]
    print(f"トークンを取得: {captcha_token[:50]}...")

    # Scraplingのクラスメソッドを使用してキャプチャトークンでフォームを送信
    submit_url = form_url or target_url
    response = Fetcher.post(
        submit_url,
        data={
            "g-recaptcha-response": captcha_token,
            # ウェブサイトが要求する他のフォームフィールドを追加してください
        }
    )

    return response

# 使用例
if __name__ == "__main__":
    url = "https://example.com/protected-page"
    site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"

    result = scrape_with_recaptcha_v2(url, site_key)
    print(f"ステータス: {result.status}")
    print(f"コンテンツ長: {len(result.body)}")  # バイトデータを取得するには .body を使用してください

ReCaptcha v2非表示版

非表示ReCaptcha v2(チェックボックスがなく、フォーム送信時にトリガーされる)には、isInvisibleパラメータを追加してください:

python Copy
solution = solve_captcha(
    task_type="ReCaptchaV2TaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    isInvisible=True
)

企業版

ReCaptcha v2企業版の場合、別のタスクタイプを使用してください:

python Copy
solution = solve_captcha(
    task_type="ReCaptchaV2EnterpriseTaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    enterprisePayload={
        "s": "必要に応じてペイロードのs値を指定"
    }
)

Scrapling + CapSolverでReCaptcha v3を解決する

ReCaptcha v3はv2とは異なり、背景で非表示で動作し、ユーザーの行動に基づいてスコア(0.0〜1.0)を割り当てます。スコアが1.0に近いほど、人間の活動である可能性が高くなります。

v2との主な違い

ReCaptcha v2 ReCaptcha v3
ユーザー操作 チェックボックス/画像チャレンジ なし(非表示)
出力 通過/失敗 スコア(0.0〜1.0)
アクションパラメータ 必要なし 必須
使用タイミング フォーム、ログイン すべてのページロード

アクションパラメータの見つけ方

アクションパラメータはウェブサイトのJavaScriptに指定されています:

javascript Copy
grecaptcha.execute('6LcxxxxxxxxxxxxxxxxABCD', {action: 'submit'})

一般的なアクションには、submitloginregisterhomepagecontactなどがあります。

実装

python Copy
from scrapling import Fetcher

def scrape_with_recaptcha_v3(target_url, site_key, page_action="submit", min_score=0.7):
    """
    ReCaptcha v3で保護されたページをスクレイピングします。

    引数:
        target_url: キャプチャが表示されているURL
        site_key: ReCaptchaのサイトキー
        page_action: アクションパラメータ(grecaptcha.executeで見つかる)
        min_score: 要求する最小スコア(0.1〜0.9)

    戻り値:
        キャプチャで保護されたページからのレスポンス
    """
    print(f"ReCaptcha v3を解決中(アクション: {page_action})...")

    solution = solve_captcha(
        task_type="ReCaptchaV3TaskProxyLess",
        website_url=target_url,
        website_key=site_key,
        pageAction=page_action
    )

    captcha_token = solution["gRecaptchaResponse"]
    print(f"スコア付きトークンを取得: {solution.get('score', 'N/A')}")

    # Scraplingのクラスメソッドを使用してトークンでリクエストを送信
    response = Fetcher.post(
        target_url,
        data={
            "g-recaptcha-response": captcha_token,
        },
        headers={
            "User-Agent": solution.get("userAgent", "Mozilla/5.0")
        }
    )

    return response

# 使用例
if __name__ == "__main__":
    url = "https://example.com/api/data"
    site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"

    result = scrape_with_recaptcha_v3(url, site_key, page_action="getData")
    print(f"レスポンス: {result.body.decode()[:200]}")  # コンテンツを取得するには .body を使用してください

ReCaptcha v3企業版

python Copy
solution = solve_captcha(
    task_type="ReCaptchaV3EnterpriseTaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    pageAction=page_action,
    enterprisePayload={
        "s": "オプションのsパラメータ"
    }
)

Scrapling + CapSolverでCloudflare Turnstileを解決する

Cloudflare Turnstileは、従来のキャプチャの「ユーザーに優しく、プライバシーを保護する」代替として設計された新しいキャプチャです。Cloudflareを使用しているウェブサイトでますます一般的になっています。

Turnstileの理解

Turnstileは3つのモードがあります:

  • マネージド: 必要なときにウィジェットを表示
  • 非インタラクティブ: ユーザーの操作なしで動作
  • 非表示: ユーザーに完全に見えない

幸いなことに、CapSolverはすべてのモードを自動的に処理します。

サイトキーの見つけ方

ページHTMLにTurnstileが表示されているのを確認してください:

html Copy
<div class="cf-turnstile" data-sitekey="0x4xxxxxxxxxxxxxxxxxxxxxxxxxx"></div>

またはJavaScript内:

javascript Copy
turnstile.render('#container', {
    sitekey: '0x4xxxxxxxxxxxxxxxxxxxxxxxxxx',
    callback: function(token) { ... }
});

実装

python Copy
from scrapling import Fetcher

def scrape_with_turnstile(target_url, site_key, action=None, cdata=None):
    """
    Cloudflare Turnstileで保護されたページをスクレイピングします。

    引数:
        target_url: キャプチャが表示されているURL
        site_key: Turnstileのサイトキー(0x4...で始まる)
        action: オプションのアクションパラメータ
        cdata: オプションのcdataパラメータ

    戻り値:
        キャプチャで保護されたページからのレスポンス
    """
    print("Cloudflare Turnstileを解決中...")

    # 提供されたメタデータを構築
    metadata = {}
    if action:
        metadata["action"] = action
    if cdata:
        metadata["cdata"] = cdata

    task_params = {
        "task_type": "AntiTurnstileTaskProxyLess",
        "website_url": target_url,
        "website_key": site_key,
    }

    if metadata:
        task_params["metadata"] = metadata

    solution = solve_captcha(**task_params)

    turnstile_token = solution["token"]
    user_agent = solution.get("userAgent", "")

    print(f"Turnstileトークンを取得: {turnstile_token[:50]}...")

    # ヘッダーを設定
    headers = {}
    if user_agent:
        headers["User-Agent"] = user_agent

    # トークンを使用して送信
    response = Fetcher.post(
        target_url,
        data={
            "cf-turnstile-response": turnstile_token,
        },
        headers=headers
    )

    return response

# 使用例
if __name__ == "__main__":
    url = "https://example.com/protected-page"
    site_key = "0x4xxxxxxxxxxxxxxxxxxxxxxxxxx"

    result = scrape_with_turnstile(url, site_key)
    print(f"ステータス: {result.status}")
    print(f"コンテンツ長: {len(result.body)}")  # バイトデータを取得するには .body を使用してください

headers=headers
)

Copy
return response

例の使用方法

if name == "main":
url = "https://example.com/protected"
site_key = "0x4AAAAAAAxxxxxxxxxxxxxx"

Copy
result = scrape_with_turnstile(url, site_key)
print(f"成功!{len(result.body)}バイト取得しました")  # コンテンツには.bodyを使用してください

アクションとCDataを含むTurnstile

一部の実装では追加のパラメータが必要な場合があります:

python Copy
solution = solve_captcha(
    task_type="AntiTurnstileTaskProxyLess",
    website_url=target_url,
    website_key=site_key,
    metadata={
        "action": "login",
        "cdata": "session_id_or_custom_data"
    }
)

StealthyFetcherの使用による強化されたアンチボット保護

単純なHTTPリクエストでは不十分な場合があります。サイトは以下をチェックする高度なボット検出技術を使用している可能性があります:

  • ブラウザのフィンガープリント
  • JavaScriptの実行
  • マウスの動きとタイミング
  • TLSのフィンガープリント
  • リクエストヘッダー

ScraplingのStealthyFetcherは、実際のブラウザエンジンを使用し、スティールトの修正によりブラウザレベルのアンチ検出を提供します。

StealthyFetcherとは?

StealthyFetcherは以下を備えた修正されたFirefoxブラウザを使用します:

  • 実際のブラウザのフィンガープリント
  • JavaScriptの実行機能
  • Cloudflareのチャレンジの自動処理
  • TLSフィンガープリントの偽装
  • クッキーとセッションの管理

StealthyFetcherを使用するタイミング

シナリオ Fetcherを使用する StealthyFetcherを使用する
簡単なフォームとキャプチャ はい いいえ
多くのJavaScriptページ いいえ はい
複数のアンチボットレイヤー いいえ はい
スピードが重要 はい いいえ
Cloudflare Under Attackモード いいえ はい

StealthyFetcherとCapSolverの併用

最大限の効果を得るために両方を併用する方法は以下の通りです:

python Copy
from scrapling import StealthyFetcher
import asyncio

async def scrape_with_stealth_and_recaptcha(target_url, site_key, captcha_type="v2"):
    """
    StealthyFetcherのアンチボット機能とCapSolverを組み合わせて、ReCaptchaを解決します。

    Args:
        target_url: スクレイピングするURL
        site_key: キャプチャサイトキー
        captcha_type: "v2" または "v3"

    Returns:
        キャプチャを解決した後のページのコンテンツ
    """

    # まず、CapSolverを使用してキャプチャを解決します
    print(f"ReCaptcha {captcha_type}を解決中...")

    if captcha_type == "v2":
        solution = solve_captcha(
            task_type="ReCaptchaV2TaskProxyLess",
            website_url=target_url,
            website_key=site_key
        )
        token = solution["gRecaptchaResponse"]

    elif captcha_type == "v3":
        solution = solve_captcha(
            task_type="ReCaptchaV3TaskProxyLess",
            website_url=target_url,
            website_key=site_key,
            pageAction="submit"
        )
        token = solution["gRecaptchaResponse"]

    else:
        raise ValueError(f"不明なキャプチャタイプ: {captcha_type}")

    print(f"トークンを取得しました: {token[:50]}...")

    # StealthyFetcherを使用してブラウザのような挙動をします
    fetcher = StealthyFetcher()

    # ページに移動します
    page = await fetcher.async_fetch(target_url)

    # JavaScriptを使用してReCaptchaの解決をインジェクトします
    await page.page.evaluate(f'''() => {{
        // g-recaptcha-responseフィールドを見つけて値を設定します
        let field = document.querySelector('textarea[name="g-recaptcha-response"]');
        if (!field) {{
            field = document.createElement('textarea');
            field.name = "g-recaptcha-response";
            field.style.display = "none";
            document.body.appendChild(field);
        }}
        field.value = "{token}";
    }}''')

    # 送信ボタンを見つけてクリックします
    submit_button = page.css('button[type="submit"], input[type="submit"]')
    if submit_button:
        await submit_button[0].click()
        # ナビゲーションを待機します
        await page.page.wait_for_load_state('networkidle')

    # 最終的なページコンテンツを取得します
    content = await page.page.content()

    return content

# シンクロナスなラッパーで使いやすくします
def scrape_stealth(target_url, site_key, captcha_type="v2"):
    """非同期のアンチスティールトスカッパーのシンクロナスなラッパー。"""
    return asyncio.run(
        scrape_with_stealth_and_recaptcha(target_url, site_key, captcha_type)
    )

# 例の使用方法
if __name__ == "__main__":
    url = "https://example.com/highly-protected-page"
    site_key = "6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABCD"

    content = scrape_stealth(url, site_key, captcha_type="v2")
    print(f"{len(content)}バイトのコンテンツを取得しました")

セッションを維持するマルチページスクレイピングの完全な例

python Copy
from scrapling import StealthyFetcher
import asyncio

class StealthScraper:
    """複数のページ間でセッションを維持するスクレイパー。"""

    def __init__(self, api_key):
        self.api_key = api_key
        self.fetcher = None

    async def __aenter__(self):
        self.fetcher = StealthyFetcher()
        return self

    async def __aexit__(self, *args):
        if self.fetcher:
            await self.fetcher.close()

    async def solve_and_access(self, url, site_key, captcha_type="v2"):
        """ReCaptchaを解決し、ページにアクセスします。"""
        global CAPSOLVER_API_KEY
        CAPSOLVER_API_KEY = self.api_key

        # ReCaptchaを解決します
        task_type = f"ReCaptcha{captcha_type.upper()}TaskProxyLess"
        solution = solve_captcha(
            task_type=task_type,
            website_url=url,
            website_key=site_key
        )
        token = solution["gRecaptchaResponse"]

        # ページに移動し、トークンをインジェクトします
        page = await self.fetcher.async_fetch(url)
        # ... 以降のページ操作を続けます

        return page

# 使用方法
async def main():
    async with StealthScraper("your_api_key") as scraper:
        page1 = await scraper.solve_and_access(
            "https://example.com/login",
            "site_key_here",
            "v2"
        )
        # 以降のリクエストでセッションが維持されます
        page2 = await scraper.solve_and_access(
            "https://example.com/dashboard",
            "another_site_key",
            "v3"
        )

asyncio.run(main())

最適な実践方法とヒント

1. レートリミット

サイトに過度のリクエストを送らないでください。リクエスト間に遅延を実装します:

python Copy
import time
import random

def polite_scrape(urls, min_delay=2, max_delay=5):
    """人間のように見えるようにランダムな遅延を用いてスクレイピングします。"""
    results = []
    for url in urls:
        result = scrape_page(url)
        results.append(result)

        # リクエスト間のランダムな遅延
        delay = random.uniform(min_delay, max_delay)
        time.sleep(delay)

    return results

2. エラーハンドリング

常に失敗を丁寧に処理してください:

python Copy
def robust_solve_captcha(task_type, website_url, website_key, max_retries=3, **kwargs):
    """自動リトライを用いたキャプチャの解決。"""
    for attempt in range(max_retries):
        try:
            return solve_captcha(task_type, website_url, website_key, **kwargs)
        except Exception as e:
            print(f"試行 {attempt + 1} に失敗: {e}")
            if attempt < max_retries - 1:
                time.sleep(5)  # リトライ前に待機
            else:
                raise

3. robots.txtを尊重する

スクレイピングする前に、ウェブサイトのrobots.txtを確認してください:

python Copy
from urllib.robotparser import RobotFileParser

def can_scrape(url):
    """robots.txtによってスクレイピングが許可されているか確認します。"""
    rp = RobotFileParser()
    rp.set_url(f"{url}/robots.txt")
    rp.read()
    return rp.can_fetch("*", url)

4. スケールでプロキシを使用する

スケールを拡大する際は、IPブロックを避けるためにプロキシをローテーションしてください:

python Copy
# CapSolverはプロキシ対応のタスクをサポートしています
solution = solve_captcha(
    task_type="ReCaptchaV2Task",  # 注意: "ProxyLess"はなし
    website_url=target_url,
    website_key=site_key,
    proxy="http://user:pass@proxy.example.com:8080"
)

5. 解決策をキャッシュする

キャプチャトークンは通常1〜2分で有効期限が切れます。複数のリクエストが必要な場合、トークンを再利用してください:

python Copy
import time

class CaptchaCache:
    def __init__(self, ttl=120):  # 2分のデフォルトTTL
        self.cache = {}
        self.ttl = ttl

    def get_or_solve(self, key, solve_func):
        """キャッシュされたトークンを取得または解決します。"""
        if key in self.cache:
            token, timestamp = self.cache[key]
            if time.time() - timestamp < self.ttl:
                return token

        token = solve_func()
        self.cache[key] = (token, time.time())
        return token

比較表

キャプチャタイプ比較

特徴 ReCaptcha v2 ReCaptcha v3 Cloudflare Turnstile
ユーザーの操作 チェックボックス + 必要に応じてチャレンジ なし 最小限またはなし
サイトキーの形式 6L... 6L... 0x4...
応答フィールド g-recaptcha-response g-recaptcha-response cf-turnstile-response
アクションパラメータ なし 必須 オプション
解決時間 1〜10秒 1〜10秒 1〜20秒
CapSolverタスク ReCaptchaV2TaskProxyLess ReCaptchaV3TaskProxyLess AntiTurnstileTaskProxyLess

Scrapling Fetcher比較

特徴 Fetcher StealthyFetcher
速度 非常に速い 遅い
JavaScriptサポート なし あり
ブラウザフィンガープリント なし 実際のFirefox
メモリ使用量 低い 高い
Cloudflare回避 なし あり
最適な用途 簡単なリクエスト 複雑なアンチボット

よくある質問

Q: CapSolverの料金はどのくらいですか?

CapSolverの料金ページを確認してください。

Q: ウェブページでサイトキーを見つける方法は?

ページソース(Ctrl+U)で以下を検索してください:

  • data-sitekey属性
  • grecaptcha.executeのJavaScriptコール
  • reCaptchaスクリプトURLのrender=パラメータ
  • class="cf-turnstile"のTurnstile

Q: キャプチャトークンが使用前に期限切れになった場合?

トークンは通常1〜2分で期限切れになります。フォーム送信に近いタイミングでキャプチャを解決してください。検証エラーが発生した場合は、新しいトークンで再解決してください。

Q: CapSolverは非同期コードで使用できますか?

はい!解決関数を非同期エグゼキュータでラップします:

python Copy
import asyncio

async def async_solve_captcha(*args, **kwargs):
    loop = asyncio.get_event_loop()
    return await loop.run_in_executor(
        None,
        lambda: solve_captcha(*args, **kwargs)
    )

Q: 1ページに複数のReCaptchasを処理する方法は?

それぞれのキャプチャを個別に解決し、すべてのトークンを送信に含めます:

python Copy
# 複数のReCaptchasを解決します
solution_v2 = solve_captcha("ReCaptchaV2TaskProxyLess", url, key1)
solution_v3 = solve_captcha("ReCaptchaV3TaskProxyLess", url, key2, pageAction="submit")

# Scraplingクラスのメソッドを使用してトークンを送信します
response = Fetcher.post(url, data={
    "g-recaptcha-response": solution_v2["gRecaptchaResponse"],
    "g-recaptcha-response-v3": solution_v3["gRecaptchaResponse"],
})

結論

ScraplingCapSolverを組み合わせることで、キャプチャ保護付きのウェブサイトをスクレイピングするための強力なソリューションが提供されます。以下に要約します:

  1. ScraplingのFetcherを使用して、速度が重要な単純なリクエストを行う
  2. StealthyFetcherを使用して、高度なアンチボットシステムに対処する
  3. CapSolverを使用して、ReCaptcha v2、v3、Cloudflare Turnstileを解決する
  4. 最適な実践方法を実装する(レートリミット、エラーハンドリング、プロキシローテーション)

責任を持ってスクレイピングしてください:

  • ウェブサイトの利用規約を尊重してください
  • サーバーに過剰なリクエストを送らないでください
  • データを倫理的に使用してください
  • 必要に応じてウェブサイトの所有者にAPIアクセスを依頼してください

スクレイピングを開始する準備ができましたか?CapSolverのAPIキーをcapsolver.comで取得し、pip install "scrapling[all]"でScraplingをインストールしてください。

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

もっと見る

BotasaurusとCapSolverを使用したPythonでのCAPTCHAの解決方法(完全ガイド)
PythonでCAPTCHAを解く方法:BotasaurusとCapSolverを使用して(完全ガイド)

Botasaurus(Pythonのウェブスクリーピングフレームワーク)をCapSolver APIと統合して、reCAPTCHA v2/v3およびTurnstileを自動的に解く方法を学ぶ

web scraping
Logo of CapSolver

Sora Fujimoto

15-Dec-2025

タブプロキシ
タブプロキシ: お得な海外住宅用プロキシ

この記事では、Tabproxyとは何か、および彼らが提供するサービスについてご紹介します。

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

ウェブスクリーピング エラー
402、403、404、および429エラーとは?Web Scrapingにおける包括的なガイド

マスターWebスクレイピングのエラー処理で、402、403、404、および429エラーとは何かを理解してください。403 Forbiddenを修正する方法を学び、レート制限エラー429の解決策を実装し、新たに登場する402 Payment Requiredのステータスコードを処理してください。

web scraping
Logo of CapSolver

Sora Fujimoto

12-Dec-2025

Pythonを使ったWebスクレイピング
ウェブスクレイピング Pythonで: 2026年の最適なテクニック

2026年のトップPythonウェブスクレイピングテクニックを学び、動的JavaScriptコンテンツの処理、認証フローの管理、CAPTCHAの解決、隠された罠の特定、人間の行動のシミュレーション、リクエストパターンの最適化、大規模なスクレイピングプロジェクトでのリソース使用量の削減について学びます。

web scraping
Logo of CapSolver

Sora Fujimoto

12-Dec-2025

ウェブスクリーピングのキャプチャを解決する
ウェブスクレイピングをブロックされずに実行する方法と、ウェブスクレイピングのCaptchaを解決する方法

ウェブスクラピングは、ウェブサイトからデータを抽出するための一般的な技術となっています。しかし、多くのウェブサイトではスクラピング防止対策を採用しており、例えば...

web scraping
Logo of CapSolver

Emma Foster

11-Dec-2025

ウェブクローリングとウェブスクラピング
ウェブクローリング vs. ウェブスクラッピング:本質的な違い

WebクローリングとWebスクラピングの本質的な違いを解明しましょう。それぞれの異なる目的と、10の強力なユースケース、そしてCapSolverがAWS WAFやCAPTCHAブロックを回避し、スムーズなデータ収集を実現する方法について学びましょう。

web scraping
Logo of CapSolver

Emma Foster

09-Dec-2025