
Sora Fujimoto
AI Solutions Architect

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)は、ウェブサイトを自動化されたボットから保護するために設計されています。CAPTCHAはオンラインプラットフォームのセキュリティにおいて重要な役割を果たしますが、Seleniumなどのツールを使用してタスクを自動化する際には、大きな障害となる可能性があります。SeleniumをRubyで使い、CAPTCHAを解決する必要がある場合、このガイドでは、効果的に処理するための手順を紹介します。
CAPTCHAの解決に取り組む前に、使用するツール、SeleniumとRubyについて理解することが重要です。
解決策に取り組む前に、遭遇する可能性のあるさまざまな種類のCAPTCHAを理解することが重要です。

トップのCAPTCHAソリューションの ボーナスコード を入手してください。CapSolver: WEBS。コードを使用すると、チャージごとに5%のボーナスが追加され、無制限に使用できます。
開発者の間で最もよく見られる質問の1つは、SeleniumとRubyを使ってCAPTCHAを解決できるかどうかです。簡単に言えば、直接はできません。Selenium単体ではCAPTCHAを解決する組み込み機能は備わっていません。CAPTCHAは、人間ユーザーとボットを区別するために特別に設計されているからです。
ただし、Selenium RubyでCAPTCHAを処理する方法はいくつかあります。
Selenium Ruby単体ではCAPTCHAを解決できませんが、適切なツールやサービスを使用すれば、CAPTCHAを回避するプロセスを自動化することは完全に可能です。このガイドでは、その方法を詳しく説明します。
Rubyがコンピュータにインストールされたら、コマンド gem install selenium-webdriver を実行してSelenium WebDriverライブラリをインストールできます。Chromeのバージョンを確認し、それに応じて対応する chromedriver.exe ドライバーをダウンロードします。ダウンロードリンクは、次の場所にあります。
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 を使って、全体のプロセスをどのように自動化できるでしょうか。手順は以下のとおりです。
display: none から display: block に変更して、Selenium と対話できるようにします。以下のコードの driver_path を、コンピューター上の chromedriver の実際のパスに置き換えてください。
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 コードを記述しましょう。
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
次に、トークンをWebページに入力し、自動的に送信ボタンをクリックしてプロセス全体を完了する必要があります。すべてのコードを組み合わせると、次のようになります(cap_solver_api_keyをCapSolverのダッシュボードで見つけることができる独自のキーに置き換えてください)。
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
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ドキュメントを参照してください。
イーコマーススクリーピング中にreCAPTCHAを処理する方法を学び、コンプライアンスに準拠したワークフロー、ダイアグノスティクス、CapSolverの例、および実用的なリスク管理について学んでください。

AIを駆動するデータ抽出の仕組みについて学び、ウェブスクレイピングやCAPTCHAの解決からHTMLのクリーニング、LLMの解析、構造化されたJSONの生成までをカバーします。アンチボット回避戦略、AXEなどのセマンティック抽出フレームワーク、そしてスケーラブルなAIウェブスクレイピングパイプラインについて探求してください。

2026年のウェブオートメーション、CAPTCHAの解決、コンプライアンス、および本番環境対応のエージェントワークフロー向けの最高のAIエージェントフレームワークを比較する。
