CAPSOLVER
Blog
Cách giải quyết CAPTCHA với Selenium trong Ruby

Cách giải quyết CAPTCHA với Selenium trong Ruby

Logo of CapSolver

Anh Tuan

Data Science Expert

29-Aug-2024

CAPTCHA, hay Completely Automated Public Turing test to tell Computers and Humans Apart, được thiết kế để bảo vệ các trang web khỏi các bot tự động. Mặc dù chúng đóng vai trò quan trọng trong việc bảo mật các nền tảng trực tuyến, nhưng chúng có thể là một trở ngại đáng kể khi tự động hóa các tác vụ bằng các công cụ như Selenium. Nếu bạn đang làm việc với Selenium trong Ruby và cần giải quyết CAPTCHA, hướng dẫn này sẽ cung cấp một cách tiếp cận từng bước để xử lý chúng một cách hiệu quả.

Selenium và Ruby là gì?

Trước khi đi sâu vào việc giải quyết CAPTCHA, điều cần thiết là phải hiểu các công cụ bạn sẽ làm việc cùng: Selenium và Ruby.

  • Selenium là một công cụ mã nguồn mở mạnh mẽ được sử dụng để tự động hóa trình duyệt web. Nó cho phép các nhà phát triển viết các script bằng nhiều ngôn ngữ lập trình khác nhau để mô phỏng tương tác của người dùng với các trang web, làm cho nó trở thành một lựa chọn phổ biến cho việc kiểm thử và thu thập dữ liệu web.
  • Ruby là một ngôn ngữ lập trình hướng đối tượng năng động, được biết đến với sự đơn giản và năng suất. Nó thường được sử dụng trong phát triển web, và khi kết hợp với Selenium, nó cung cấp một khung mạnh mẽ để tự động hóa các tác vụ trình duyệt.

Hiểu về CAPTCHA và các loại của chúng

Trước khi đi sâu vào giải pháp, điều quan trọng là phải hiểu các loại CAPTCHA mà bạn có thể gặp phải:

  • CAPTCHA ImageToText: Những CAPTCHA này yêu cầu người dùng nhập các ký tự được hiển thị trong một hình ảnh bị biến dạng. Bạn có thể tìm thấy một số trường hợp phổ biến ở đây
  • CAPTCHA dựa trên hình ảnh: Người dùng cần chọn các hình ảnh phù hợp với tiêu chí đã cho (ví dụ: chọn tất cả các hình ảnh có đèn giao thông). Chủ yếu từ reCAPTCHA
  • reCAPTCHA: Hệ thống CAPTCHA nâng cao của Google thường yêu cầu nhận dạng các đối tượng trong hình ảnh hoặc chỉ cần nhấp vào một hộp kiểm để chứng minh bạn không phải là bot.

Nhận mã khuyến mãi của bạn Mã Khuyến Mãi cho các giải pháp captcha hàng đầu; CapSolver: WEBS. Sau khi đổi, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, Không giới hạn

Selenium Ruby có thể giải quyết CAPTCHA không?

Một trong những câu hỏi phổ biến nhất trong số các nhà phát triển là liệu Selenium với Ruby có thể giải quyết CAPTCHA hay không. Câu trả lời ngắn gọn là: không trực tiếp. Selenium tự nó không có khả năng tích hợp để giải quyết CAPTCHA vì chúng được thiết kế đặc biệt để phân biệt giữa người dùng và bot.
Tuy nhiên, có một số cách tiếp cận để xử lý CAPTCHA trong Selenium Ruby:

  1. Can thiệp thủ công: Trong một số trường hợp, các nhà phát triển giải quyết CAPTCHA thủ công trong quá trình tự động hóa. Tuy nhiên, điều này làm mất mục đích của việc tự động hóa hoàn toàn.
  2. Trình giải quyết CAPTCHA của bên thứ ba: Phương pháp hiệu quả nhất là tích hợp các dịch vụ của bên thứ ba như CapSolver chuyên giải quyết CAPTCHA bằng các thuật toán tiên tiến và trí thông minh nhân tạo.
  3. Giải quyết CAPTCHA đơn giản: Đối với CAPTCHA văn bản rất cơ bản, các nhà phát triển có thể viết các script tùy chỉnh để nhận dạng các mẫu, mặc dù phương pháp này bị hạn chế và thường không đáng tin cậy.

Mặc dù Selenium Ruby không thể tự giải quyết CAPTCHA, nhưng với các công cụ và dịch vụ phù hợp, hoàn toàn có thể tự động hóa quá trình bỏ qua CAPTCHA, điều mà chúng ta sẽ tìm hiểu trong hướng dẫn này.

Cài đặt Selenium trong Ruby

Chuẩn bị

  • Google Chrome: Cài đặt phiên bản mới nhất của trình duyệt Chrome, vì chúng ta sẽ sử dụng code để tương tác với Chrome.
  • Ruby: Đảm bảo rằng Ruby đã được cài đặt trên máy tính của bạn.
  • Selenium-webdriver: Thư viện Ruby cho công cụ tự động hóa Selenium.
  • CapSolver: Tài liệu chính thức của CapSolver sẽ giúp bạn giải quyết CAPTCHA.

Sau khi Ruby được cài đặt trên máy tính của bạn, bạn có thể cài đặt thư viện Selenium WebDriver bằng cách chạy lệnh gem install selenium-webdriver. Kiểm tra phiên bản Chrome của bạn, và dựa trên đó, tải xuống trình điều khiển chromedriver.exe tương ứng. Bạn có thể tìm thấy các liên kết tải xuống tại các vị trí sau:

Phân tích trang web mục tiêu

Chúng ta sẽ sử dụng trang web https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php làm ví dụ để giải quyết reCAPTCHA bằng Ruby Selenium.

Trước khi bắt đầu, chúng ta cần hiểu các kiến thức cơ bản về việc gửi biểu mẫu HTML. Bằng cách quan sát trang này và mở công cụ dành cho nhà phát triển, chúng ta có thể tự động giải quyết reCAPTCHA và sau đó nhấp vào nút gửi. Hành động này gửi một yêu cầu POST, gửi ba trường: ex-a, ex-bg-recaptcha-response, như hình dưới đây:

Ba trường này tương ứng với hai phần tử đầu vào và một phần tử textarea dưới biểu mẫu trong mã nguồn HTML ban đầu, như hình dưới đây:

Tự động hóa quy trình bằng Ruby Selenium

Làm thế nào chúng ta có thể tự động hóa toàn bộ quy trình bằng Ruby Selenium? Các bước như sau:

  1. Ruby điều khiển Selenium truy cập trang web mục tiêu.
  2. Ruby gọi API CapSolver để giải quyết reCAPTCHA và lấy token.
  3. Thay đổi kiểu CSS của phần tử textarea từ display: none thành display: block để làm cho nó tương tác được với Selenium.
  4. Mô phỏng việc nhập token được trả về bởi CapSolver vào phần tử textarea.
  5. Mô phỏng việc nhấp vào nút gửi để gửi biểu mẫu và hoàn tất xác minh.

Truy cập trang web mục tiêu bằng Ruby Selenium

Hãy đảm bảo rằng bạn thay thế driver_path trong code dưới đây bằng đường dẫn thực tế đến chromedriver trên máy tính của bạn.

ruby Copy
require 'selenium-webdriver'

# Khởi tạo tùy chọn trình duyệt Chrome và truy cập trang web mục tiêu
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

Lấy token

Để sử dụng API CapSolver, chúng ta cần cung cấp websiteKey, có thể tìm thấy bằng cách tìm kiếm từ khóa data-sitekey trong nguồn trang:

Bây giờ, hãy viết code Ruby để sử dụng API CapSolver để tự động giải quyết reCAPTCHA:

ruby Copy
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,
    }
  }

  # Gửi yêu cầu tạo tác vụ
  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 "Tạo tác vụ thất bại: #{res.body}"
    return
  end

  puts "Đã có taskId: #{task_id}"

  # Vòng lặp chờ để lấy kết quả tác vụ
  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 "Giải quyết thành công, token: #{token}"
      return token
    elsif status == "processing"
      puts "Đang giải quyết..."
    elsif status == "failed"
      puts "Giải quyết thất bại! phản hồi: #{res.body}"
      return
    end
  end
end

Sử dụng token trong Selenium

Tiếp theo, chúng ta cần nhập token vào trang web, tự động nhấp vào gửi và hoàn thành toàn bộ quy trình. Hãy kết hợp tất cả code; code hoàn chỉnh như sau (hãy chắc chắn thay thế cap_solver_api_key bằng key của riêng bạn, có thể tìm thấy trong bảng điều khiển CapSolver):

ruby Copy
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,
    }
  }

  # Gửi yêu cầu tạo tác vụ
  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 "Tạo tác vụ thất bại: #{res.body}"
    return
  end

  puts "Đã có taskId: #{task_id}"

  # Vòng lặp chờ để lấy kết quả tác vụ
  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 "Giải quyết thành công, token: #{token}"
      return token
    elsif status == "processing"
      puts "Đang giải quyết..."
    elsif status == "failed"
      puts "Giải quyết thất bại! phản hồi: #{res.body}"
      return
    end
  end
end

# Khởi tạo tùy chọn trình duyệt Chrome và truy cập trang web mục tiêu
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

# Gọi API CapSolver để giải quyết 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 "Giải quyết captcha thất bại, Nhấn bất kỳ phím nào để thoát."
  STDIN.gets
  driver.quit
  return
end

# Thay đổi thuộc tính kiểu hiển thị của textarea thành block để làm cho nó hiển thị
driver.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# Mô phỏng việc nhập token vào textarea
textarea = driver.find_element(id: 'g-recaptcha-response')
textarea.send_keys(token)
# Mô phỏng việc nhấp và gửi biểu mẫu
submit_btn = driver.find_element(css: "button[type='submit']")
submit_btn.click

puts "Nhấn bất kỳ phím nào để thoát."
STDIN.gets
driver.quit

Chạy code trên và bạn sẽ thấy rằng recaptcha đã được giải quyết thành công.

Thông tin thêm

CapSolver sử dụng công nghệ mở khóa web tự động dựa trên AI để giúp bạn giải quyết CAPTCHA trong vài giây. Nó có thể giải quyết không chỉ reCAPTCHA mà còn cả Cloudflare Turnstile và nhiều hơn nữa. CapSolver cũng cung cấp SDK bằng nhiều ngôn ngữ cũng như tiện ích mở rộng trình duyệt. Bạn có thể tham khảo tài liệu CapSolver để biết thêm thông tin.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm

Cách sửa lỗi gỡ mã web phổ biến vào năm 2026
Cách sửa các lỗi thu thập dữ liệu web phổ biến vào năm 2026

Nắm vững việc sửa chữa các lỗi trình gỡ mã web đa dạng như 400, 401, 402, 403, 429, 5xx, và Cloudflare 1001 vào năm 2026. Học các chiến lược tiên tiến về chuyển đổi IP, tiêu đề, và giới hạn tốc độ thích ứng với CapSolver.

web scraping
Logo of CapSolver

Nikolai Smirnov

05-Feb-2026

Làm thế nào để giải quyết bảo vệ Cloudflare khi quét web
Cách khắc phục bảo vệ Cloudflare khi quét web

Học cách giải quyết bảo vệ Cloudflare khi quét dữ liệu web. Khám phá các phương pháp đã được chứng minh như xoay đổi IP, tinh vân TLS và CapSolver để xử lý các thách thức.

web scraping
Logo of CapSolver

Nikolai Smirnov

05-Feb-2026

RoxyBrowser với tích hợp CapSolver
Cách giải Captcha trong RoxyBrowser với tích hợp CapSolver

Tích hợp CapSolver với RoxyBrowser để tự động hóa các nhiệm vụ trình duyệt và vượt qua reCAPTCHA, Turnstile và các CAPTCHA khác.

web scraping
Logo of CapSolver

Anh Tuan

04-Feb-2026

AI Tính liên quan với CapSolver
Cách giải reCAPTCHA v2 trong Relevance AI với tích hợp CapSolver

Xây dựng một công cụ AI của Relevance để giải quyết reCAPTCHA v2 bằng CapSolver. Tự động hóa việc gửi biểu mẫu qua API mà không cần tự động hóa trình duyệt.

web scraping
Logo of CapSolver

Anh Tuan

03-Feb-2026

Công cụ Ghi Dữ Liệu Nhanh: Cách Nhanh Chóng Trích Xuất Dữ Liệu Từ Web Không Cần Mã
Công cụ Ghi dữ liệu Nhanh: Cách nhanh chóng trích xuất dữ liệu web mà không cần code

Khám phá các công cụ trích xuất dữ liệu tức thì tốt nhất cho năm 2026. Học các cách nhanh chóng để trích xuất dữ liệu từ web mà không cần mã nguồn bằng cách sử dụng các tiện ích mở rộng hàng đầu và API để trích xuất tự động.

web scraping
Logo of CapSolver

Nikolai Smirnov

28-Jan-2026

Trích xuất dữ liệu từ web bài báo tin tức
Thu thập dữ liệu từ web các bài báo tin tức bằng Python (Hướng dẫn 2026)

Nắm vững trích xuất dữ liệu từ web bài báo tin tức bằng Python vào năm 2026. Học cách giải reCAPTCHA v2/v3 bằng CapSolver và xây dựng các pipeline dữ liệu có thể mở rộng.

web scraping
Logo of CapSolver

Anh Tuan

28-Jan-2026