CAPSOLVER
ブログ
カモウフォックスとカプソルバーを統合する方法 – シームレスなCAPTCHA解決のために

CamoufoxをCapSolverと統合する方法

Logo of CapSolver

Sora Fujimoto

AI Solutions Architect

16-Dec-2025

TL;DR: ブラウザのファイントラッキングを回避するにはCamoufoxを使用し、Cloudflare TurnstileやreCAPTCHA v2/v3などのCAPTCHAを自動的に解決するにはCapSolverを使用してください。これらを組み合わせることで、検出を最小限に抑え、高い成功率でスケーラブルな人間のようなウェブ自動化が可能です。

はじめに

ウェブ自動化はデータ収集、テスト、およびさまざまなビジネス操作において不可欠となっています。しかし、現代のウェブサイトは、最も丁寧に作成された自動化スクリプトさえもブロックする高度なアンチボット対策やCAPTCHAを導入しています。

Camoufoxと**CapSolver**の組み合わせは、この課題に対する強力なソリューションを提供します。

  • Camoufox: JavaScriptのインジェクションに依存するのではなく、ブラウザ自体のC++レベルでファイントラッキングスプーフィングを実装したオープンソースのアンチデテクトブラウザ
  • CapSolver: Cloudflare Turnstile、reCAPTCHAなどに対応したAI駆動のCAPTCHA解決サービス

これらのツールを組み合わせることで、ファイントラッキング検出とCAPTCHAチャレンジを回避するスムーズなウェブ自動化が可能になります。

統合の目的

このガイドでは、以下の3つの主要な目標を達成する方法を紹介します。

  1. ボット検出を回避する - Camoufoxのファイントラッキング注入機能を使用して、正当なブラウザのように見える
  2. CAPTCHAを自動的に解決する - CapSolverのAPIを統合して、手動での介入なしにCAPTCHAチャレンジを処理する
  3. 人間のような動作を維持する - マウスの動きを人間化し、知能あるCAPTCHA解決を組み合わせる

Camoufoxとは?

Camoufoxは、ウェブスクレイピングや自動化に特化した、ステルス性と最小限のカスタムFirefoxビルドです。他のアンチデテクトソリューションがJavaScriptインジェクションに依存しているのとは異なり、Camoufoxはブラウザ自体のC++レベルでファイントラッキングスプーフィングを実装しています。

主な特徴

  • ファイントラッキングの注入 - ナビゲータープロパティ、スクリーンサイズ、WebGL、WebRTC、フォントなどをネイティブレベルでスプーフィング
  • 人間のようなマウスの動き - 実際のインタラクションに似たカーソルのヒューマナイズアルゴリズムを内蔵
  • BrowserForgeとの統合 - 現実世界のデバイス分布を模倣するファイントラッキングを生成
  • GeoIPサポート - プロキシIPに基づいてタイムゾーン、ロケール、ジオロケーションを自動的に計算
  • Firefoxアドオンサポート - カスタム拡張機能(広告ブロッカーなど)をロード

インストール

bash Copy
# Pythonパッケージをインストール
pip install -U camoufox[geoip]

# Camoufoxブラウザをダウンロード
camoufox fetch

基本的な使い方

python Copy
from camoufox.sync_api import Camoufox

with Camoufox(humanize=True) as browser:
    page = browser.new_page()
    page.goto("https://example.com")

CapSolverとは?

CapSolverは、幅広いCAPTCHAタイプをサポートするAI駆動の自動CAPTCHA解決サービスです。数秒でCAPTCHAチャレンジを送信し、解決結果を取得できるシンプルなAPIを提供しています。

サポートされているCAPTCHAタイプ

  • Cloudflare Turnstile - 最も一般的な現代のアンチボットチャレンジ
  • reCAPTCHA v2 - イメージベースと非表示のバージョン
  • reCAPTCHA v3 - スコアベースの検証
  • AWS WAF - Amazon Web ServicesのCAPTCHA
  • その他にも多数あります...

CapSolverの使い方

  1. capsolver.comで登録
  2. アカウントに資金を追加
  3. ダッシュボードからAPIキーを取得

ボーナス: 登録時にコード CAMOUFOX を使用すると、ボーナスクレジットがもらえます!


統合前の課題

CamoufoxとCapSolverを統合する前に、ウェブ自動化にはいくつかの問題点がありました。

課題 影響
ブラウザのファイントラッキング検出 スクリプトがコンテンツに到達する前にブロックされる
CAPTCHAチャレンジ 手動での解決が必要で、自動化が中断される
IPの信頼性システム プロキシがすぐにブロックされ、禁止される
行動分析 非人間的なパターンが検出される

Camoufox + CapSolverの統合は、これらの課題を一度に解決します。


統合方法

方法1: API統合(推奨)

API統合アプローチでは、CAPTCHA解決プロセスの完全な制御が可能で、あらゆるCAPTCHAタイプと動作します。

必要な設定

bash Copy
pip install camoufox[geoip] httpx

コア統合パターン

python Copy
import asyncio
import httpx
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def create_task(task_payload: dict) -> str:
    """CAPTCHA解決タスクを作成し、タスクIDを返します。"""
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": task_payload
            }
        )
        result = response.json()
        if result.get("errorId") != 0:
            raise Exception(f"CapSolverエラー: {result.get('errorDescription')}")
        return result["taskId"]


async def get_task_result(task_id: str, max_attempts: int = 120) -> dict:
    """タスク結果をポーリングして解決またはタイムアウトまで待機します。"""
    async with httpx.AsyncClient() as client:
        for _ in range(max_attempts):
            response = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            result = response.json()

            if result.get("status") == "ready":
                return result["solution"]
            elif result.get("status") == "failed":
                raise Exception(f"タスク失敗: {result.get('errorDescription')}")

            await asyncio.sleep(1)

    raise TimeoutError("CAPTCHA解決がタイムアウトしました")


async def solve_captcha(task_payload: dict) -> dict:
    """CAPTCHA解決ワークフローを完了します。"""
    task_id = await create_task(task_payload)
    return await get_task_result(task_id)

方法2: ブラウザ拡張機能

CapSolverのブラウザ拡張機能をCamoufoxで使用することで、手間をかけずに運用できます。

インストール手順

  1. capsolver.com/en/extensionからCapSolver拡張機能をダウンロード
  2. 拡張機能ファイルを抽出
  3. Camoufoxにロード:
python Copy
from camoufox.sync_api import Camoufox

with Camoufox(
    addons=["/path/to/capsolver-extension"],
    headless=False  # 拡張機能はヘッドレスモードでは動作しません
) as browser:
    page = browser.new_page()
    # 拡張機能が自動的にCAPTCHAを検出および解決します

コード例

例1: Cloudflare Turnstileの解決

Cloudflare Turnstileは最も一般的なCAPTCHAチャレンジの一つです。以下にその解決方法を示します。

python Copy
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_turnstile(site_key: str, page_url: str) -> str:
    """Cloudflare Turnstileを解決し、トークンを返します。"""
    import httpx

    async with httpx.AsyncClient() as client:
        # タスクを作成
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "AntiTurnstileTaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                }
            }
        )
        task_id = response.json()["taskId"]

        # 結果をポーリング
        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["token"]

            await asyncio.sleep(1)


async def main():
    target_url = "https://example.com/protected-page"
    turnstile_site_key = "0x4XXXXXXXXXXXXXXXXX"  # ページソースから確認してください

    async with AsyncCamoufox(
        humanize=True,
        headless=False,
        os="windows"
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # Turnstileが読み込まれるのを待機
        await page.wait_for_selector('input[name="cf-turnstile-response"]', timeout=10000)

        # CAPTCHAを解決
        token = await solve_turnstile(turnstile_site_key, target_url)
        print(f"Turnstileトークンを取得: {token[:50]}...")

        # トークンを注入
        await page.evaluate(f'''
            document.querySelector('input[name="cf-turnstile-response"]').value = "{token}";

            // もし存在すれば、非表示のコールバックを設定
            const callback = document.querySelector('[data-callback]');
            if (callback) {{
                const callbackName = callback.getAttribute('data-callback');
                if (window[callbackName]) {{
                    window[callbackName]('{token}');
                }}
            }}
        ''')

        # フォームを送信
        await page.click('button[type="submit"]')
        await page.wait_for_load_state("networkidle")

        print("Turnstileを成功裏に回避しました!")


if __name__ == "__main__":
    asyncio.run(main())

例2: reCAPTCHA v2の解決

python Copy
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_recaptcha_v2(site_key: str, page_url: str) -> str:
    """reCAPTCHA v2を解決し、トークンを返します。"""
    import httpx

    async with httpx.AsyncClient() as client:
        # タスクを作成
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "ReCaptchaV2TaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                }
            }
        )
        result = response.json()

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

        task_id = result["taskId"]

        # 結果をポーリング
        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["gRecaptchaResponse"]
            elif data.get("status") == "failed":
                raise Exception(f"失敗: {data.get('errorDescription')}")

            await asyncio.sleep(2)


async def main():
    target_url = "https://example.com/login"
    recaptcha_site_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"  # ページソースから確認してください

    async with AsyncCamoufox(
        humanize=True,
        headless=False,
        os=["windows", "macos"]  # ランダムなOSの選択
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # 人間のような遅延でフォームフィールドを埋めます
        await page.fill('input[name="username"]', "[email protected]")
        await asyncio.sleep(0.5)  # 人間のような一時停止
        await page.fill('input[name="password"]', "password123")

        # CAPTCHAを解決
        print("reCAPTCHA v2を解決中...")
        token = await solve_recaptcha_v2(recaptcha_site_key, target_url)
        print(f"トークンを取得: {token[:50]}...")

        # reCAPTCHAの応答フィールドにトークンを注入
        await page.evaluate(f'''
            document.getElementById('g-recaptcha-response').innerHTML = '{token}';
            document.getElementById('g-recaptcha-response').style.display = 'block';
        ''')

        # フォームを送信
        await page.click('button[type="submit"]')
        await page.wait_for_load_state("networkidle")

        print("ログインに成功しました!")


if __name__ == "__main__":
    asyncio.run(main())

例3: reCAPTCHA v3の解決

reCAPTCHA v3はスコアベースで、ユーザーの操作は必要ありません。アクションパラメータを指定する必要があります。

python Copy
import asyncio
from camoufox.async_api import AsyncCamoufox

CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"


async def solve_recaptcha_v3(
    site_key: str,
    page_url: str,
    action: str = "verify",
    min_score: float = 0.7
) -> str:
    """指定されたアクションと最小スコアでreCAPTCHA v3を解決します。"""
    import httpx

    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{CAPSOLVER_API}/createTask",
            json={
                "clientKey": CAPSOLVER_API_KEY,
                "task": {
                    "type": "ReCaptchaV3TaskProxyLess",
                    "websiteURL": page_url,
                    "websiteKey": site_key,
                    "pageAction": action,
                    "minScore": min_score
                }
            }
        )
        result = response.json()

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

        task_id = result["taskId"]

        while True:
            result = await client.post(
                f"{CAPSOLVER_API}/getTaskResult",
                json={
                    "clientKey": CAPSOLVER_API_KEY,
                    "taskId": task_id
                }
            )
            data = result.json()

            if data.get("status") == "ready":
                return data["solution"]["gRecaptchaResponse"]
            elif data.get("status") == "failed":
                raise Exception(f"失敗: {data.get('errorDescription')}")

            await asyncio.sleep(1)


async def main():
    target_url = "https://example.com/search"
    recaptcha_v3_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"

    async with AsyncCamoufox(
        humanize=2.0,  # 最大2秒のヒューマナイズされた動き
        headless=True,  # v3ではヘッドレスで動作可能
        geoip=True,  # プロキシからジオロケーションを自動検出
    ) as browser:
        page = await browser.new_page()
        await page.goto(target_url)

        # "search"アクションでreCAPTCHA v3を解決
        print("reCAPTCHA v3を解決中...")
        token = await solve_recaptcha_v3(
            recaptcha_v3_key,
            target_url,
            action="search",
            min_score=0.9  # 高スコアを要求
        )

        # トークンでコールバックを実行
        await page.evaluate(f'''
            // サイトのコールバック経由でトークンを送信

grecaptcha.execute('{recaptcha_v3_key}', {action: 'search'})
.then(function(originalToken) {
// お使いの解決済みトークンに置き換える
submitSearch('{token}');
});
''')

Copy
    print("reCAPTCHA v3を回避しました!")

if name == "main":
asyncio.run(main())

Copy
---

## ベストプラクティス

### 1. プロキシローテーションとGeoIP

CamoufoxのGeoIP機能を使用して、プロキシの場所に自動的にフィンガープリントを一致させます:

```python
async with AsyncCamoufox(
    geoip=True,  # プロキシIPから自動検出
    proxy={
        "server": "http://proxy.example.com:8080",
        "username": "user",
        "password": "pass"
    }
) as browser:
    # フィンガープリントはプロキシの地理的場所に一致する
    pass

2. フィンガープリントの一貫性

セッション内ではフィンガープリントを一貫させ、セッション間ではローテーションします:

python Copy
from browserforge.fingerprints import Screen

# 一般的な画面サイズに制限
screen = Screen(
    min_width=1280,
    max_width=1920,
    min_height=720,
    max_height=1080
)

async with AsyncCamoufox(
    os="windows",
    screen=screen,
) as browser:
    pass

3. レートリミットの回避

遅延を追加してレートリミットを回避します:

python Copy
import random

async def human_delay():
    """人間の行動を模倣するランダムな遅延."""
    await asyncio.sleep(random.uniform(1.0, 3.0))

# アクションの間に使用
await page.click('button')
await human_delay()
await page.fill('input', 'text')

4. エラー処理

CAPTCHAの解決には常に適切なエラー処理を実装してください:

python Copy
async def solve_with_retry(task_payload: dict, max_retries: int = 3) -> dict:
    """リトライロジックでCAPTCHAを解決."""
    for attempt in range(max_retries):
        try:
            return await solve_captcha(task_payload)
        except TimeoutError:
            if attempt < max_retries - 1:
                print(f"タイムアウト、リトライ中... ({attempt + 1}/{max_retries})")
                await asyncio.sleep(5)
            else:
                raise
        except Exception as e:
            if "balance" in str(e).lower():
                raise  # バランスエラーはリトライしない
            if attempt < max_retries - 1:
                await asyncio.sleep(2)
            else:
                raise

ボーナス: 今日から始めましょう!

CamoufoxとCapSolverでウェブ自動化を加速させたいですか?

CapSolverで登録する際、コード CAMOUFOX を使用してボーナスクレジットを取得しましょう!

この限定ボーナスで、CAPTCHAの解決をすぐに始められます。


結論

Camoufoxと**CapSolver**の統合は、ウェブ自動化のための強力なツールキットを提供します:

  • Camoufoxはネイティブレベルのフィンガープリントスプーフィングでボット検出を処理
  • CapSolverはAI駆動のCAPTCHA解決を処理
  • 一緒に使用することで、完全に人間のように見えるシームレスな自動化が可能です

ウェブスクレイパー、自動テストシステム、データ収集パイプラインを構築している場合でも、この組み合わせは必要な信頼性と隠密性を提供します。


よくある質問 (FAQ)

Q: この統合で最も効果的なCAPTCHAの種類はどれですか?

A: CapSolverはすべての主要なCAPTCHAタイプをサポートしています。Cloudflare TurnstileやreCAPTCHA v2/v3が最も高い成功率を持っています。CapSolverがサポートするすべてのCAPTCHAとシームレスに動作します。

Q: ヘッドレスモードで使用できますか?

A: はい!Camoufoxはヘッドレスモードをサポートし、フィンガープリントスプーフィングの機能を維持します。reCAPTCHA v3やトークンベースのCAPTCHAではヘッドレスモードが完璧に動作します。v2の可視CAPTCHAでは、ヘッドモードの方がより良い結果を得られる場合があります。

Q: CAPTCHAのサイトキーを見つける方法は?

A: ページのソースコードを確認してください:

  • Turnstile: data-sitekey属性またはcf-turnstile要素
  • reCAPTCHA: g-recaptchadata-sitekey属性

Q: CAPTCHAの解決に失敗した場合どうすればいいですか?

A: 一般的な解決策:

  1. APIキーと残高を確認してください
  2. サイトキーが正しいか確認してください
  3. ページのURLがCAPTCHAが表示される場所と一致しているか確認してください
  4. v3の場合、actionパラメータや最小スコアを調整してみてください
  5. 遅延付きのリトライロジックを実装してください

Q: CamoufoxはSeleniumと動作しますか?

A: CamoufoxはSeleniumではなくPlaywrightに基づいて構築されています。しかし、どのブラウザ自動化フレームワークでも、同じCapSolver APIの統合パターンを使用できます。

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

もっと見る

CamoufoxとCapSolverのCAPTCHA解決ワークフロー
CamoufoxをCapSolverと統合する方法

CamoufoxをCapSolverと統合して、Cloudflare TurnstileおよびreCAPTCHAを信頼性を持って大規模に回避する方法を学びましょう。

web scraping
Logo of CapSolver

Sora Fujimoto

16-Dec-2025

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