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

phần mở rộng tốt nhất để giải CAPTCHA 2026
Tiện ích tốt nhất để giải CAPTCHA 2026 là gì?

Trong thế giới an ninh trực tuyến không ngừng phát triển, các thách thức CAPTCHA đã trở thành rào cản phổ biến đối với người dùng internet...

Extension
Logo of CapSolver

Ethan Collins

12-Dec-2025

Đăng nhập Gen
Genlogin: Đổi mới Trải nghiệm Tự động hóa Web

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Genlogin là gì và các dịch vụ mà họ cung cấp.

Partners
Logo of CapSolver

Rajinder Singh

12-Dec-2025

ProxysIO
Proxys.io: Proxy riêng lẻ cho bất kỳ nhiệm vụ nào

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Proxys.io là gì và các dịch vụ mà họ cung cấp.

Partners
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

Tabproxy
Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

IP2Thế giới
IP2World Proxy Nhà Ở: Giải pháp IP proxy toàn cầu hàng đầu

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn IP2World là gì và các dịch vụ mà họ cung cấp.

Partners
Logo of CapSolver

Ethan Collins

12-Dec-2025

lỗi trích xuất dữ liệu từ web
Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện

Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

web scraping
Logo of CapSolver

Lucas Mitchell

12-Dec-2025