RubyでSeleniumを使ってCAPTCHAを解く方法

Sora Fujimoto
AI Solutions Architect
05-Sep-2024

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)は、ウェブサイトを自動化されたボットから保護するために設計されています。CAPTCHAはオンラインプラットフォームのセキュリティにおいて重要な役割を果たしますが、Seleniumなどのツールを使用してタスクを自動化する際には、大きな障害となる可能性があります。SeleniumをRubyで使い、CAPTCHAを解決する必要がある場合、このガイドでは、効果的に処理するための手順を紹介します。
SeleniumとRubyとは
CAPTCHAの解決に取り組む前に、使用するツール、SeleniumとRubyについて理解することが重要です。
- Seleniumは、ウェブブラウザを自動化するのに使用される強力なオープンソースツールです。開発者はさまざまなプログラミング言語でスクリプトを作成し、ウェブページとのユーザーインタラクションをシミュレートできます。そのため、テストやウェブスクレイピングで人気があります。
- Rubyは、シンプルさと生産性で知られる、動的かつオブジェクト指向のプログラミング言語です。ウェブ開発によく使用され、Seleniumと組み合わせることで、ブラウザタスクの自動化のための堅牢なフレームワークを提供します。
CAPTCHAとその種類について
解決策に取り組む前に、遭遇する可能性のあるさまざまな種類のCAPTCHAを理解することが重要です。
- ImageToText CAPTCHA: これらのCAPTCHAでは、ユーザーは歪んだ画像に表示されている文字を入力する必要があります。一般的なケースは こちら で確認できます。
- 画像ベースCAPTCHA: ユーザーは、特定の基準に一致する画像を選択する必要があります(例:信号機のある画像をすべて選択)。ほとんどはreCAPTCHAから。
- reCAPTCHA: Googleの高度なCAPTCHAシステム。通常、画像内のオブジェクトを認識したり、チェックボックスをクリックして、自分がボットではないことを証明したりする必要があります。

- captcha: reCAPTCHA と似ていますが、プライバシー重視のソリューションを目指すウェブサイトでよく使用されます。
トップのCAPTCHAソリューションの ボーナスコード を入手してください。CapSolver: WEBS。コードを使用すると、チャージごとに5%のボーナスが追加され、無制限に使用できます。
Selenium RubyでCAPTCHAを解決できるのか?
開発者の間で最もよく見られる質問の1つは、SeleniumとRubyを使ってCAPTCHAを解決できるかどうかです。簡単に言えば、直接はできません。Selenium単体ではCAPTCHAを解決する組み込み機能は備わっていません。CAPTCHAは、人間ユーザーとボットを区別するために特別に設計されているからです。
ただし、Selenium RubyでCAPTCHAを処理する方法はいくつかあります。
- 手動介入: 場合によっては、開発者は自動化プロセス中に手動でCAPTCHAを解決します。しかし、これは完全な自動化の目的を無効にしてしまいます。
- サードパーティのCAPTCHAソルバー: 最も効果的な方法は、CapSolverなどのCAPTCHA解決に特化したサードパーティサービスを統合することです。これらのサービスは、高度なアルゴリズムと人間の知能を使ってCAPTCHAを解決します。
- 簡単なCAPTCHAの解決: 非常に基本的なテキストCAPTCHAの場合、開発者はパターンを認識するカスタムスクリプトを作成することがありますが、この方法は限定的で、しばしば信頼できません。
Selenium Ruby単体ではCAPTCHAを解決できませんが、適切なツールやサービスを使用すれば、CAPTCHAを回避するプロセスを自動化することは完全に可能です。このガイドでは、その方法を詳しく説明します。
RubyでSeleniumを設定する
準備
- Google Chrome: Chromeブラウザの最新バージョンをインストールしてください。コードを使用してChromeとやり取りするためです。
- Ruby: コンピュータにRubyがインストールされていることを確認してください。
- Selenium-webdriver: 自動化ツールSelenium用のRubyライブラリです。
- CapSolver: CapSolverの公式ドキュメントは、CAPTCHAを解決するのに役立ちます。
Rubyがコンピュータにインストールされたら、コマンド gem install selenium-webdriver を実行してSelenium WebDriverライブラリをインストールできます。Chromeのバージョンを確認し、それに応じて対応する chromedriver.exe ドライバーをダウンロードします。ダウンロードリンクは、次の場所にあります。
- ダウンロードリンク1: ドライバーの最新Stable、Beta、Dev、Canaryバージョンを提供します。
- ダウンロードリンク2: バージョン113以降のすべてのドライバーを提供します。
- ダウンロードリンク3: バージョン113以前のすべてのドライバーを提供します。
ターゲットウェブサイトの分析
Ruby Seleniumを使用してreCAPTCHAを解決する例として、ウェブサイト https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php を使用します。
開始する前に、HTMLフォーム送信の基本を理解する必要があります。このページを観察し、開発者ツールを開いて、手動でreCAPTCHAを解決し、送信ボタンをクリックすることができます。このアクションはPOSTリクエストを送信し、 ex-a 、 ex-b 、 g-recaptcha-response の3つのフィールドを送信します。これは以下に示すように:

これらの3つのフィールドは、初期のHTMLソースコードのフォームの下にある2つの入力要素と1つのテキストエリア要素に対応します。これは以下に示すように:

Ruby Selenium を使った自動化プロセス
Ruby Selenium を使って、全体のプロセスをどのように自動化できるでしょうか。手順は以下のとおりです。
- Ruby が Selenium を駆使してターゲットウェブサイトにアクセスします。
- Ruby が CapSolver API を呼び出して reCAPTCHA を解決し、トークンを取得します。
- textarea 要素の CSS スタイルを
display: noneからdisplay: blockに変更して、Selenium と対話できるようにします。 - CapSolver から返されたトークンを textarea 要素に入力するようにシミュレートします。
- 提出ボタンをクリックしてフォームを送信し、検証を完了するようにシミュレートします。
Ruby Selenium でターゲットウェブサイトにアクセスする
以下のコードの driver_path を、コンピューター上の chromedriver の実際のパスに置き換えてください。
ruby
require 'selenium-webdriver'
# Chrome ブラウザオプションを初期化し、ターゲットウェブサイトにアクセス
driver_path = "path/to/chromedriver.exe"
options = Selenium::WebDriver::Chrome::Options.new
service = Selenium::WebDriver::Service.chrome(path: driver_path)
driver = Selenium::WebDriver.for :chrome, options: options, service: service
url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.navigate.to url
トークンの取得
CapSolver API を使用するには、ページソースでキーワード data-sitekey を検索することで見つけることができる websiteKey を指定する必要があります。

それでは、CapSolver API を使用して reCAPTCHA を自動的に解決するための Ruby コードを記述しましょう。
ruby
require 'net/http'
require 'json'
require 'time'
def cap_solver(api_key, public_key, page_url)
payload = {
"clientKey" => api_key,
"task" => {
"type" => 'ReCaptchaV2TaskProxyLess',
"websiteKey" => public_key,
"websiteURL" => page_url,
}
}
# タスク作成リクエストを送信
```ruby
require 'selenium-webdriver'
require 'net/http'
require 'json'
require 'time'
def cap_solver(api_key, website_key, page_url)
payload = {
"clientKey" => api_key,
"task" => {
"type" => 'ReCaptchaV2TaskProxyLess',
"websiteKey" => website_key,
"websiteURL" => page_url,
}
}
# タスク作成リクエストを送信
uri = URI("https://api.capsolver.com/createTask")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
task_id = resp["taskId"]
unless task_id
puts "タスク作成に失敗しました: #{res.body}"
return
end
puts "taskIdを取得しました: #{task_id}"
# タスクの結果が得られるまでループ
loop do
sleep(1)
payload = { "clientKey" => api_key, "taskId" => task_id }
uri = URI("https://api.capsolver.com/getTaskResult")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
status = resp["status"]
if status == "ready"
token = resp.dig("solution", "gRecaptchaResponse")
puts "解決完了、token: #{token}"
return token
elsif status == "processing"
puts "解決処理中..."
elsif status == "failed"
puts "解決に失敗しました!レスポンス: #{res.body}"
return
end
end
end
Seleniumでのトークンの利用
次に、トークンをWebページに入力し、自動的に送信ボタンをクリックしてプロセス全体を完了する必要があります。すべてのコードを組み合わせると、次のようになります(cap_solver_api_keyをCapSolverのダッシュボードで見つけることができる独自のキーに置き換えてください)。
ruby
require 'selenium-webdriver'
require 'net/http'
require 'json'
require 'time'
def cap_solver(api_key, website_key, page_url)
payload = {
"clientKey" => api_key,
"task" => {
"type" => 'ReCaptchaV2TaskProxyLess',
"websiteKey" => website_key,
"websiteURL" => page_url,
}
}
# タスク作成リクエストを送信
uri = URI("https://api.capsolver.com/createTask")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
task_id = resp["taskId"]
unless task_id
puts "タスク作成に失敗しました: #{res.body}"
return
end
puts "taskIdを取得しました: #{task_id}"
# タスクの結果が得られるまでループ
loop do
sleep(1)
payload = { "clientKey" => api_key, "taskId" => task_id }
uri = URI("https://api.capsolver.com/getTaskResult")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
status = resp["status"]
if status == "ready"
token = resp.dig("solution", "gRecaptchaResponse")
puts "解決完了、token: #{token}"
return token
elsif status == "processing"
puts "解決処理中..."
elsif status == "failed"
puts "解決に失敗しました!レスポンス: #{res.body}"
return
end
end
end
# Seleniumを使用してWebページと対話する
driver = Selenium::WebDriver.for :chrome
# Webページにアクセスする
driver.get("https://www.example.com")
# CapSolverを使用してreCAPTCHAトークンを取得する
token = cap_solver("cap_solver_api_key", "website_key", driver.current_url)
# トークンをWebページに入力する
driver.execute_script("document.getElementById('g-recaptcha-response').value = '#{token}';")
# 送信ボタンをクリックする
driver.find_element(:css, "button[type='submit']").click
# プロセスが完了したらSeleniumドライバーを閉じる
driver.quit
ruby
sleep(1)
payload = { "clientKey" => api_key, "taskId" => task_id }
uri = URI("https://api.capsolver.com/getTaskResult")
res = Net::HTTP.post(uri, payload.to_json, { "Content-Type" => "application/json" })
resp = JSON.parse(res.body)
status = resp["status"]
if status == "ready"
token = resp.dig("solution", "gRecaptchaResponse")
puts "Solve succeed, token: #{token}"
return token
elsif status == "processing"
puts "Solve in progress..."
elsif status == "failed"
puts "Solve failed! response: #{res.body}"
return
end
end
end
# Chromeブラウザオプションの初期化とターゲットウェブサイトへのアクセス
driver_path = "path/to/chromedriver.exe"
options = Selenium::WebDriver::Chrome::Options.new
service = Selenium::WebDriver::Service.chrome(path: driver_path)
driver = Selenium::WebDriver.for :chrome, options: options, service: service
url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
driver.navigate.to url
# CapSolver APIを呼び出してReCaptchaを解決する
cap_solver_api_key = 'YOUR_API_KEY'
website_key = '6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9'
token = cap_solver(cap_solver_api_key, website_key, url)
if token.nil? || token.empty?
puts "Failed to solve captcha, Press any key to exit."
STDIN.gets
driver.quit
return
end
# テキストエリアの表示スタイルプロパティをブロックに変更して表示できるようにする
driver.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# テキストエリアにトークンを入力するシミュレーション
textarea = driver.find_element(id: 'g-recaptcha-response')
textarea.send_keys(token)
# フォームをクリックして送信するシミュレーション
submit_btn = driver.find_element(css: "button[type='submit']")
submit_btn.click
puts "Press any key to exit."
STDIN.gets
driver.quit
詳細情報
CapSolverは、AIベースの自動ウェブアンロック技術を使用して、数秒でCAPTCHAを解決します。 reCAPTCHAだけでなく、captcha、captcha、Cloudflare Turnstile、captcha、captcha WAFなども解決できます。 CapSolverは、複数の言語でSDKを提供するだけでなく、ブラウザ拡張機能も提供しています。 詳細については、CapSolverドキュメントを参照してください。
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る

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

Sora Fujimoto
05-Dec-2025

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

Sora Fujimoto
05-Dec-2025

ScraplingとCapSolverを用いたウェブスクラッピング時のキャプチャの解き方
Scrapling + CapSolver は、ReCaptcha v2/v3 および Cloudflare Turnstile のバイパスを備えた自動スクリーピングを可能にします。

Sora Fujimoto
05-Dec-2025

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

Sora Fujimoto
05-Dec-2025

CapSolver拡張機能を使用してCloudflare Turnstileを解決する際に`action`が必要かどうかを確認する方法
クラウドフレア・ターニスティルの効果的なCAPTCHAの解決方法を学びます。Capsolverのツールとテクニックを使用するためのステップバイステップのガイドに従ってください。

Nikolai Smirnov
05-Dec-2025

9Proxyの力の発見: 包括的なレビュー
本記事では、9proxyとは何かおよび彼らが提供するサービスについてご紹介します。

Anh Tuan
04-Dec-2025


