CAPSOLVER
ブログ
キャプソルをSeleniumと統合する方法 | 完全ガイド 2025

CapSolverとSeleniumを統合する方法 | 完全ガイド 2025

Logo of CapSolver

Sora Fujimoto

AI Solutions Architect

04-Sep-2025

Seleniumとは何ですか?

Seleniumは、主にウェブアプリケーションの自動テストに使用されるオープンソースの自動テストツールです。また、ウェブスクレイピングやウェブサイトの操作を自動化するためにもよく使用されます。Seleniumは、ブラウザでさまざまなユーザー行動をシミュレートできます。例えば、クリック、入力、スクロール、ページの切り替えなどが含まれます。Seleniumは2004年にJason Hugginsによって開発され、現在はSeleniumプロジェクトチームによってメンテナンスされています。Seleniumは、Python、Java、C#、Ruby、JavaScriptなどの複数のプログラミング言語をサポートしています。

Seleniumには次のコアコンポーネントがあります:

  1. Selenium WebDriver (最も一般的に使用されます)

    • ブラウザのネイティブな制御を提供し、Chrome、Firefox、Edge、Safariなどの主要ブラウザをサポートしています。
    • クリック、入力、スクロール、タブの切り替えなどのブラウザ操作をシミュレートできます。
    • 各ブラウザには対応するドライバがあり、chromedrivergeckodriverなどがあります。
  2. Selenium IDE

    • Chrome/Firefox用のブラウザ拡張機能で、テストスクリプトの記録と再生が可能です。テストの初心者向けに適しています。
  3. Selenium Grid

    • 複数のブラウザやマシンをテストグリッドに統合し、スクリプトの並列実行を可能にする分散テストを可能にします。

一般的な使用ケース

  • 動的コンテンツのスクレイピング: JavaScriptによって生成されたデータを抽出します。
  • 複雑なインタラクションの処理: ログインや複数ステップの操作が必要なサイトのスクレイピングに適しています。
  • SPAアプリケーションからのデータ抽出: VueやReactなどのフレームワークで構築されたページをクロールします。
  • 自動テスト: ページの機能を検証しながら同時にデータを収集します。
  • ヘッドレスモードでの作業: グラフィカルインターフェースなしですべての操作を実行し、サーバーで動作させるのに適しています。

Seleniumの基本的な使い方

PythonでSeleniumを使用するには:

bash Copy
pip install selenium

ChromeでSeleniumを使用するには、GithubからChromeバージョンに一致するchromedriverをダウンロードしてください。

例: CapSolverのブログからすべてのブログ投稿タイトルを取得するには:

python Copy
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# chromedriverのパスを指定(PATHに追加されている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

try:
    driver.get("https://www.capsolver.com/blog/All")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'h5')))

    h5_elements = driver.find_elements(By.TAG_NAME, "h5")
    for el in h5_elements:
        print(el.text.strip())

finally:
    driver.quit()

CapSolver拡張機能をSeleniumに統合する方法

Seleniumは、通常のブラウザと同じようにブラウザ拡張機能をロードできる強力なツールです。

  1. 公式CapSolver GitHubから最新の拡張機能.zipパッケージをダウンロードし、解凍してください:
    👉 https://github.com/capsolver/capsolver-browser-extension/releases

  2. Seleniumの起動オプションで、load-extension引数を使用して拡張機能のパスを指定します:

python Copy
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("load-extension=/path/to/capSolver extension")

# chromedriverのパスを指定(PATHに追加されている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

try:
    driver.get("https://www.capsolver.com/blog/All")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'h5')))

    h5_elements = driver.find_elements(By.TAG_NAME, "h5")
    for el in h5_elements:
        print(el.text.strip())

finally:
    driver.quit()

⚠️ 重要: Chrome v137から、手動で次の引数を追加しないと、ブラウザの自動化が拡張機能をロードできなくなります。
このフラグがないと、Chrome 137+で拡張機能を通じてCAPTCHAを解決することはできません

python Copy
chrome_options.add_argument("--disable-features=DisableLoadExtensionCommandLineSwitch")

詳細については: SeleniumHQ。バージョンによって動作が異なる場合があります。環境に応じて調整してください。

CapSolver拡張機能を使用してreCAPTCHA v2を解決する方法

reCAPTCHA、Cloudflare Turnstile、AWS WAF、GeeTestなどのCAPTCHAは、数千のウェブサイトで広く使用されています。しかし、それらのDOM構造はサイト間でほとんど一貫しています。CapSolver拡張機能は、それらの特徴的な特徴に基づいて自動的に検出し、解決します—手動での操作は必要ありません。

reCAPTCHA v2を例に取り、Selenium内でCapSolver拡張機能を使用して回避する方法を説明します。
(ただし、特に指定がない限り、以下のデモではclickモードを使用します: /assets/config.js → reCaptchaMode: 'click'

🛠️ 拡張機能を解凍し、/assets/config.jsapiKeyを設定することを忘れないでください

python Copy
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# ステップ1: GitHubから拡張機能を取得: https://github.com/capsolver/capsolver-browser-extension/releases
# ステップ2: 拡張機能を解凍し、/assets/config.jsでapiKeyを設定します
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")

# chromedriverのパスを指定(PATHに追加されている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

try:
    driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))

    # 拡張機能は自動的にreCAPTCHAを検出し、解決します
    time.sleep(15)

    # 解決後、送信ボタンをクリックします
    submit_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
    submit_button.click()
    time.sleep(3)

except Exception as error:
    print(error)

finally:
    driver.quit()

CapSolver拡張機能は、多くの有用な設定オプションもサポートしています。すべての設定は/assets/config.jsファイルで調整できます。

solvedCallback設定オプション

前の例では、ページを読み込んだ後、15秒間待って送信ボタンをクリックしました。この待機時間は、CapSolver拡張機能がreCAPTCHAを自動的に解決するのに十分な時間があることを意図していました。
しかし、このアプローチはエレガントではありません。実際には、CAPTCHAの解決に15秒未満かかる場合や、ネットワークが遅い場合に15秒以上かかる場合があります。

これを解決するために、CapSolverはsolvedCallbackという設定オプションを提供しています。これは、CAPTCHAが成功裏に解決されたときにトリガーされるコールバック関数を定義するものです。solvedCallbackオプションは/assets/config.jsにあり、関数名をカスタマイズできます。デフォルトではcaptchaSolvedCallbackです。

PuppeteerやPlaywrightを使用している場合、page.exposeFunctionメソッドを使用してこのコールバック関数をブラウザコンテキストに公開できます。詳しくは以下を参照してください:

Python + Seleniumの場合どうなるのでしょうか?

残念ながら、PythonのSeleniumにはpage.exposeFunctionに相当する組み込みの機能がありません。そのため、solvedCallback機能はこの環境では完全には利用できません

代わりに、DOMの観察を使用してCAPTCHAが解決されたかどうかを判断することを推奨します。例えば、"I'm not a robot"チェックボックスが消えたり、チェックマーク(✔)に変わったかどうかを確認します。これにより、検証が完了したことを示します。

前の例を改善するために、この戦略を使用してみましょう:

python Copy
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# ステップ1: GitHubから拡張機能を取得: https://github.com/capsolver/capsolver-browser-extension/releases
# ステップ2: 拡張機能を解凍し、/assets/config.jsでapiKeyを設定します
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")

# chromedriverのパスを指定(PATHに追加されている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

def check_recaptcha_status(driver):
    try:
        iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[src*="recaptcha"]')
        driver.switch_to.frame(iframe)

        # チェックボックスがチェックされていることを示すクラス名を確認します
        recaptcha_anchor = driver.find_element(By.ID, "recaptcha-anchor")
        class_list = recaptcha_anchor.get_attribute("class")
        driver.switch_to.default_content()
        if "recaptcha-checkbox-checked" in class_list.split():
            return True
        else:
            return False
    except Exception as e:
        print(f"reCAPTCHAのステータスを確認できませんでした: {e}")
        driver.switch_to.default_content()
        return False

try:
    driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))
    
    # 拡張機能は自動的にCAPTCHAを認識し、解決します。
    # 固定時間の待機ではなく、定期的に確認します。
    timeout = 30
    start_time = time.time()
    while time.time() - start_time < timeout:
        if check_recaptcha_status(driver):
            print("reCAPTCHAの検証に成功しました!")
            submit_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
            submit_button.click()
            time.sleep(3)
            driver.quit()
            break
        time.sleep(1)

except Exception as error:
    print(error)

finally:
    driver.quit()

manualSolving設定オプション

前の例では、ページが読み込まれた直後にCAPTCHAの解決プロセスが自動的に開始されます。しかし、場合によっては、CAPTCHAソルバーをトリガーする前に他の操作(例: ユーザー名とパスワードの入力)を行う必要があるかもしれません。CAPTCHAを早めに解決すると、送信前にトークンが期限切れになる可能性があります。

manualSolvingオプションは、この問題に対処するために設計されています。/assets/config.jsmanualSolving: trueを設定すると、以下の2つの方法のいずれかで手動でCAPTCHAの解決をトリガーできます:

  1. SeleniumでCapSolver拡張機能ボタンをクリックするようにシミュレートします。
  2. スクリプトを実行してメッセージを送信します: window.postMessage({ type: 'capsolverSolve' });
    (この方法は、拡張機能バージョンv1.16.0以上でサポートされています。)

以下の例では、この2つの方法の使用方法を示します:

python Copy
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# ステップ1: GitHubから拡張機能を取得 (https://github.com/capsolver/capsolver-browser-extension/releases)
# ステップ2: 拡張機能を解凍し、/assets/config.jsでapiKeyを設定します
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")

# chromedriverのパスを指定(PATHに追加されている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

def check_recaptcha_status(driver):
    try:
        iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[src*="recaptcha"]')
        driver.switch_to.frame(iframe)

        # チェックボックスがチェックされているかを確認します
        recaptcha_anchor = driver.find_element(By.ID, "recaptcha-anchor")
        class_list = recaptcha_anchor.get_attribute("class")
        driver.switch_to.default_content()
        if "recaptcha-checkbox-checked" in class_list.split():
            return True
        else:
            return False
    except Exception as e:
        print(f"reCAPTCHAのステータスを確認できませんでした: {e}")
        driver.switch_to.default_content()
        return False

try:
    driver.get("https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))

    # ユーザー入力をシミュレートします
    driver.execute_script("""
        const inputA = document.querySelector('input[name="ex-a"]');
        inputA.value = 'username';
        const inputB = document.querySelector('input[name="ex-b"]');
        inputB.value = 'password';
    """)

    # 他の操作をシミュレートします
    for i in range(1, 6):
        time.sleep(1)
        print(f"{i}秒待機中...");

    # CAPTCHAの解決を開始します(config.jsでmanualSolvingをtrueに設定する必要があります)
    print("CAPTCHAの解決を開始します...")

    # 方法1: CapSolverボタンをクリックするようにシミュレートします
    try:
        capsolver_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#capsolver-solver-tip-button")))
        driver.execute_script("arguments[0].click();", capsolver_button)
    except Exception as e:
        print(f"CapSolverボタンを検出できませんでした: {e}")

    # 方法2: postMessageを介してトリガー(代替方法)
# driver.execute_script("window.postMessage({ type: 'capsolverSolve' });")

    # CAPTCHAが解決されるのを待ってからフォームを送信します
    timeout = 30
    start_time = time.time()
    while time.time() - start_time < timeout:
        if check_recaptcha_status(driver):
            print("reCAPTCHAの検証に成功しました!")
            submit_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]')
            submit_button.click()
            time.sleep(3)
            driver.quit()
            break
        time.sleep(1)

except Exception as error:
    print(error)

finally:
    driver.quit()

reCaptchaModeの設定

reCaptchaModeclicktokenの2つのモードをサポートしています。

  • click: 画像チャレンジをクリックして人間のように動作します。
  • token: クリックをスキップし、APIを介してタスクをCapSolverのバックエンドに直接送信し、CAPTCHAが解決されたらトークンを返します。

clickモードで複数回の画像チャレンジが必要な場合、それはローカル環境の品質が低いことを示しています。その場合、tokenモードを使用することを推奨します

クリックモード トークンモード

showSolveButtonの設定

showSolveButton: falseを設定した場合(デフォルトはtrue)、CapSolverの解決ボタンはページに表示されなくなります。
ただし、これはCAPTCHA解決機能に影響を与えません。バックグラウンドで正常に動作します。

useProxyの設定

useProxy: trueを有効にした後、以下のプロキシ設定を指定できます:

  • proxyType
  • hostOrIp
  • port
  • proxyLogin
  • proxyPassword

これにより、カスタムプロキシを使用してCAPTCHAを解決します。

いつカスタムプロキシを使用するべきですか?以下は一般的なシナリオです:

  1. あなたのプロキシがより良い品質(例: reCAPTCHAトークンのスコアが高くなる)または高速な解決速度を提供する場合。
  2. 一部のケースでは、CAPTCHAを解決するIPアドレスとトークンを送信するIPアドレスが一致している必要があるため、プロキシを使用する必要があります。

上記はよく使われる設定オプションです。実際のニーズに応じて他の設定を調整できます。質問がある場合は、カスタマーサポートにご連絡ください。

CapSolver拡張機能でImageToTextを解決する方法

reCAPTCHA、Cloudflare Turnstile、AWS WAFなどのサードパーティのCAPTCHAとは異なり、画像から文字や数字を認識する必要がある別の種類のCAPTCHAがあります。これをImageToText CAPTCHAと呼びます。通常このような見た目になります:

ImageToText CAPTCHAは通常、ウェブサイトオーナーによってカスタム実装されます。これらのCAPTCHAの配置は異なるウェブサイトやページで変化するため、CapSolver拡張機能は自動的にどの画像がCAPTCHAかを検出できません。コードで手動で指定する必要があります

以下のように行います:

  1. CAPTCHA画像要素にcapsolver-image-to-text-source属性(値0)を追加します。
  2. 結果の入力フィールド要素にcapsolver-image-to-text-result属性(値0)を追加します。

capsolver-image-to-text-sourcecapsolver-image-to-text-resultの両方の属性は、/assets/config.jsのオプションtextCaptchaSourceAttributetextCaptchaResultAttributeで構成できます。

demoを例に、SeleniumでImageToText CAPTCHAを解決する方法を説明します:

ページソースから以下を特定します:

  • CAPTCHA画像要素ID: demoCaptcha_CaptchaImage
  • 結果入力フィールドID: captchaCode

このような感じです:

これで、SeleniumスクリプトでsetAttributeメソッドを使用して必要な属性を追加できます:

python Copy
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# ステップ1: GitHubから拡張機能を取得します (https://github.com/capsolver/capsolver-browser-extension/releases)
# ステップ2: 拡張機能のzipファイルを解凍し、/assets/config.jsでapiKeyを構成します
chrome_options.add_argument("load-extension=/path/to/CapSolver Browser Extension-v1.16.0")

# chromedriverのパスを指定します(PATHに追加されている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

try:
    driver.get("https://captcha.com/demos/features/captcha-demo.aspx")
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#demoCaptcha_CaptchaImage')))

    # CapSolver拡張機能にCAPTCHA画像の場所を伝える
    driver.execute_script("""
        const imgElement = document.querySelector('#demoCaptcha_CaptchaImage');
        if (imgElement) {
            imgElement.setAttribute('capsolver-image-to-text-source', '0');
        }
    """)

    # 認識結果が入力される場所をCapSolver拡張機能に伝える
    driver.execute_script("""
        const resultElement = document.querySelector('#captchaCode');
        if (resultElement) {
            resultElement.setAttribute('capsolver-image-to-text-result', '0');
        }
    """)

    time.sleep(5)
    validate_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'validateCaptchaButton')))
    validate_button.click()
    time.sleep(5)

except Exception as error:
    print(error)

finally:
    driver.quit()

期待される結果:

CapSolver APIをSeleniumに統合する方法

CapSolverブラウザ拡張機能を使用するのは便利で高速ですが、経験豊富な開発者向けには、API方法を使用することを推奨します。拡張機能ベースの統合に比べて、APIアプローチにはいくつかの利点があります:

  1. より多くのパラメータをカスタマイズでき、入力がより正確になります—ほぼすべてのCAPTCHAシナリオに対応可能です。
  2. CAPTCHAを解決するタイミングをより正確にコントロールできます。
  3. APIはより詳細なエラーメッセージを提供し、論理を最適化するのに役立ちます。

手順を開始する前に

CapSolver APIの使い方を理解する必要があります。プロセスは2つのステップからなります:

  • ステップ1: https://api.capsolver.com/createTaskを介してタスクを作成します
  • ステップ2: https://api.capsolver.com/getTaskResultを介して結果を取得します

タスクを作成する際、通常はclientKeywebsiteURLwebsiteKeyなどのパラメータを含むJSONペイロードをCapSolverに送信します。これらのパラメータはCAPTCHAの種類やターゲットウェブサイトによって異なります。詳細については、ドキュメントをご参照ください。

CapSolver APIでreCAPTCHA v2を解決する方法

reCAPTCHA v2を解決する前に、以下のガイドを参照してください:
👉 https://docs.capsolver.com/en/guide/captcha/ReCaptchaV2/
このリクエストでどのJSONフィールドを含めるべきかが説明されています。

また、CapSolver拡張機能を使用して必要なJSONデータを素早く抽出することもできます。詳細はこのブログをご覧ください:
🔗 JSONデータを取得

以下を例に挙げます: https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php,
必要なJSONペイロードは次の通りです:

json Copy
{
    "type": "ReCaptchaV2TaskProxyLess",
    "websiteKey": "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9",
    "websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
}

ドキュメントには、APIを使用するためのPythonコードサンプルも提供されています:

例: Selenium(Python)との統合

python Copy
import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# chromedriverのパスを指定します(PATHにすでに含まれている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

# TODO: CapSolverの設定を構成してください
api_key = "YOUR_API_KEY"  # CapSolver APIキーに置き換えてください
site_key = "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9"  # reCAPTCHAサイトキー
site_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"  # ターゲットページのURL
captcha_type = 'ReCaptchaV2TaskProxyLess'

def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": captcha_type,
            "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"タスクIDを取得しました: {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 ""

try:
    token = capsolver()
    print("トークン:", token)

    driver.get(site_url)
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]')))

    # reCAPTCHA応答トークンを注入します
    driver.execute_script("""
        const textarea = document.getElementById('g-recaptcha-response');
        if (textarea) {
            textarea.value = arguments[0];
        }
    """, token)

    # 送信ボタンをクリックします
    submit_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[type="submit"]')))
    submit_button.click()
    time.sleep(5)

except Exception as error:
    print(error)

finally:
    driver.quit()

CapSolver APIでImageToTextを解決する方法

引き続き、例のサイトを使用します: https://captcha.com/demos/features/captcha-demo.aspx
このページでは、CAPTCHA画像要素のIDはdemoCaptcha_CaptchaImage、結果の入力フィールドのIDはcaptchaCodeです。下記のスクリーンショットをご参照ください:

ImageToTextTaskでは、CAPTCHA画像のbase64エンコードされた値をCapSolverに渡す必要があります。動作する例を以下に示します:

python Copy
import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# chromedriverのパスを指定します(PATHにすでに含まれている場合は省略可能)
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

# TODO: CapSolverの設定を構成してください
api_key = "YOUR_API_KEY"  # CapSolver APIキーに置き換えてください
site_url = "https://captcha.com/demos/features/captcha-demo.aspx"  # ターゲットページのURL
captcha_type = 'ImageToTextTask'

def capsolver(base64Image):
    payload = {
        "clientKey": api_key,
        "task": {
            "type": captcha_type,
            "websiteURL": site_url,
            "body": base64Image
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    status = resp.get("status")
    if status == "ready":
        return resp.get("solution", {}).get('text')
    elif status == "failed" or resp.get("errorId"):
        print("解決に失敗しました!レスポンス:", res.text)
        return ""
    else:
        print("不明なレスポンス:", resp.text)
        return ""

try:
    driver.get(site_url)
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#demoCaptcha_CaptchaImage')))

    # CAPTCHA画像のsrc属性からbase64文字列を取得します
    captcha_src = driver.execute_script("""
        const img = document.querySelector('img[id="demoCaptcha_CaptchaImage"]');
        return img ? img.getAttribute('src') : null;
    """)

    if not captcha_src:
        raise Exception("CAPTCHA画像を取得できませんでした!")

    base64_image = captcha_src.split(',')[1]  # 「data:image/png;base64,」プレフィックスを削除します
    captcha_text = capsolver(base64_image)
    print("テキスト:", captcha_text)

    # CAPTCHA結果を入力します
    driver.execute_script("""
        document.getElementById('captchaCode').value = arguments[0];
    """, captcha_text)

    # 検証ボタンをクリックします
    validate_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '#validateCaptchaButton'))
    )
    validate_button.click()
    time.sleep(5)

except Exception as error:
    print(error)

finally:
    driver.quit()

複雑なImageToText CAPTCHAの場合、異なる認識モデルを指定して精度を向上させることができます。詳細については、公式ドキュメントをご参照ください:
👉 https://docs.capsolver.com/en/guide/recognition/ImageToTextTask/

CapSolver SDKをSeleniumに統合する方法

CapSolverは、PythonおよびGolangの公式SDKを提供しており、最小限の努力でCAPTCHAの解決を統合できます。リレ APIを使用する場合(createTaskおよびgetTaskResultを手動で処理する必要があります)、SDKはプロセス全体を簡略化します。

公式GitHubリポジトリ:

CapSolver SDKを使用したreCAPTCHA v2の解決

APIと同様に、reCAPTCHA v2を解決する前に、送信するJSONパラメータに関する詳細情報を参照してください:
🔗 https://docs.capsolver.com/en/guide/captcha/ReCaptchaV2/
また、CapSolverのブラウザ拡張機能を使用して、必要なJSONデータを素早く抽出することもできます:
🔗 https://www.capsolver.com/blog/reCAPTCHA/recaptcha-v3-solver-human-score

このページを例として使用します:
👉 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php

必要なJSONペイロードは次のようになります:

json Copy
{
  "type": "ReCaptchaV2TaskProxyLess",
  "websiteKey": "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9",
  "websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
}

CapSolver SDKのインストール:

bash Copy
pip install capsolver

例:SeleniumでのSDK使用

python Copy
import time
import capsolver
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

# CapSolverの設定を指定
api_key = "YOUR_API_KEY"
site_key = "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9"
site_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
captcha_type = 'ReCaptchaV2TaskProxyLess'
capsolver.api_key = api_key

try:
    # SDKを使用して解決
    solution = capsolver.solve({
        "type": captcha_type,
        "websiteURL": site_url,
        "websiteKey": site_key,
    })
    token = solution["gRecaptchaResponse"]
    print("token:", token)

    driver.get(site_url)
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'form[action="/recaptcha-v2-checkbox.php"]'))
    )

    driver.execute_script("""
        const textarea = document.getElementById('g-recaptcha-response');
        if (textarea) {
            textarea.value = arguments[0];
        }
    """, token)

    submit_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[type="submit"]'))
    )
    submit_button.click()
    time.sleep(5)

except Exception as error:
    print(error)

finally:
    driver.quit()

CapSolver SDKを使用したImageToTextの解決

APIと同様に、次のサイトを使用します:
👉 https://captcha.com/demos/features/captcha-demo.aspx
CAPTCHA画像のIDはdemoCaptcha_CaptchaImageであり、結果の入力フィールドのIDはcaptchaCodeです。

ImageToTextTaskでは、単にBase64エンコードされた画像をCapSolverに渡す必要があります。

例コード:

python Copy
import time
import capsolver
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--start-maximized")
service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(options=chrome_options, service=service)

# CapSolverの設定を指定
api_key = "YOUR_API_KEY"
site_url = "https://captcha.com/demos/features/captcha-demo.aspx"
captcha_type = 'ImageToTextTask'
capsolver.api_key = api_key

try:
    driver.get(site_url)
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '#demoCaptcha_CaptchaImage'))
    )

    # 画像からbase64文字列を取得
    captcha_src = driver.execute_script("""
        const img = document.querySelector('img[id="demoCaptcha_CaptchaImage"]');
        return img ? img.getAttribute('src') : null;
    """)
    if not captcha_src:
        raise Exception("CAPTCHA画像を取得できませんでした!")

    base64_image = captcha_src.split(',')[1]
    solution = capsolver.solve({
        "type": captcha_type,
        "websiteURL": site_url,
        "body": base64_image,
    })
    captcha_text = solution["text"]
    print("Text:", captcha_text)

    driver.execute_script("""
        document.getElementById('captchaCode').value = arguments[0];
    """, captcha_text)

    validate_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '#validateCaptchaButton'))
    )
    validate_button.click()
    time.sleep(5)

except Exception as error:
    print(error)

finally:
    driver.quit()

参考資料

CapSolver拡張機能を用いたデモ動画:

さらに、CapSolverは開発者収益共有プログラムを提供しており、開発者やパートナーは、CapSolverのソリューションを統合または宣伝することで手数料を得ることができます。これは、効率的にCAPTCHAを解決する人々を支援しながら、あなたの仕事に報酬をもたらす素晴らしい方法です。詳細については、以下を参照してください:
CapSolver開発者プラン

結論

このガイドでは、SeleniumCapSolverを効果的に統合してCAPTCHAを処理する方法を紹介しました。Seleniumのウェブ自動化におけるコア機能をカバーし、CapSolverの統合方法の2つの主要な方法を紹介しました:

  1. CapSolverブラウザ拡張機能:即時的なCAPTCHA解決のためのシンプルなソリューションで、迅速なセットアップに適しています。
  2. CapSolver API/SDK:より多くのコントロールと正確さを提供し、高度なユースケースに適しています。詳細なAPIドキュメントはここ、Python SDKはここから確認できます。

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

もっと見る

クラウドフレア エラー 1006、1007、1008
クラウドフレア エラー 1006、1007、1008 解決の方法 | 修正方法

Cloudflareのエラー1006、1007、または1008に苦しんでいますか?これらのアクセス拒否を解決し、ウェブクローリング体験を向上させる実用的な解決策を学びましょう。

Cloudflare
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

AI-LLM: リスク管理の未来のソリューション 画像認識およびCAPTCHAの解決
AI-LLM: リスクコントロールのための画像認識とCAPTCHA解決の未来のソリューション

LLMsがグラフィカルCAPTCHAの解決をどのように変革するかの詳細な探求:ゼロショット推論とCNNの精度を融合した現代のリスク管理へのアプローチ

web scraping
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

Webスクレイピング中にCAPTCHAを解く方法:ScraplingとCapSolverを使って
ScraplingとCapSolverを用いたウェブスクラッピング時のキャプチャの解き方

Scrapling + CapSolver は、ReCaptcha v2/v3 および Cloudflare Turnstile のバイパスを備えた自動スクリーピングを可能にします。

web scraping
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

SeleniumでUser-Agentを変更する
SeleniumでのUser-Agentの変更 | ステップとベストプラクティス

SeleniumでUser Agentを変更することは、多くのウェブスクレイピングタスクにおいて重要なステップです。これは自動化スクリプトを通常のブラウザのように見せかけるために役立ちます...

The other captcha
Logo of CapSolver

Sora Fujimoto

05-Dec-2025

Cloudflare Turnstileを解決するためには`action`が必要かどうかを識別する方法 – CapSolver拡張機能を使用して
CapSolver拡張機能を使用してCloudflare Turnstileを解決する際に`action`が必要かどうかを確認する方法

クラウドフレア・ターニスティルの効果的なCAPTCHAの解決方法を学びます。Capsolverのツールとテクニックを使用するためのステップバイステップのガイドに従ってください。

Cloudflare
Logo of CapSolver

Nikolai Smirnov

05-Dec-2025

9プロキシ
9Proxyの力の発見: 包括的なレビュー

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

Partners
Logo of CapSolver

Anh Tuan

04-Dec-2025