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:
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.
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.
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.
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:
Liên kết tải xuống 1: Cung cấp các phiên bản Stable, Beta, Dev và Canary mới nhất của trình điều khiển.
Liên kết tải xuống 2: Cung cấp tất cả các trình điều khiển từ phiên bản 113 trở lên.
Liên kết tải xuống 3: Cung cấp tất cả các trình điều khiển cho các phiên bản trước 113.
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-b và g-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:
Ruby điều khiển Selenium truy cập trang web mục tiêu.
Ruby gọi API CapSolver để giải quyết reCAPTCHA và lấy token.
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.
Mô phỏng việc nhập token được trả về bởi CapSolver vào phần tử textarea.
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.
rubyCopy
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:
rubyCopy
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):
rubyCopy
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ư.