CAPTCHA, atau Completely Automated Public Turing test to tell Computers and Humans Apart, dirancang untuk melindungi situs web dari bot otomatis. Meskipun mereka memainkan peran penting dalam mengamankan platform online, mereka dapat menjadi hambatan yang signifikan saat mengotomatiskan tugas dengan alat seperti Selenium. Jika Anda bekerja dengan Selenium di Ruby dan perlu menyelesaikan CAPTCHA, panduan ini akan memberikan pendekatan langkah demi langkah untuk menangani mereka secara efektif.
Apa itu Selenium dan Ruby?
Sebelum kita membahas cara menyelesaikan CAPTCHA, penting untuk memahami alat yang akan Anda gunakan: Selenium dan Ruby.
- Selenium adalah alat open-source yang ampuh yang digunakan untuk mengotomatiskan browser web. Ini memungkinkan pengembang untuk menulis skrip dalam berbagai bahasa pemrograman untuk mensimulasikan interaksi pengguna dengan halaman web, menjadikannya pilihan populer untuk pengujian dan pengambilan data web.
- Ruby adalah bahasa pemrograman dinamis, berorientasi objek yang dikenal karena kesederhanaan dan produktivitasnya. Sering digunakan dalam pengembangan web, dan jika digabungkan dengan Selenium, ia menawarkan kerangka kerja yang kuat untuk mengotomatiskan tugas browser.
Memahami CAPTCHA dan Jenis-jenisnya
Sebelum membahas solusinya, penting untuk memahami berbagai jenis CAPTCHA yang mungkin Anda temui:
- CAPTCHA ImageToText: Ini mengharuskan pengguna untuk memasukkan karakter yang ditampilkan dalam gambar yang terdistorsi. Anda dapat menemukan beberapa kasus umum di sini
- CAPTCHA berbasis gambar: Pengguna perlu memilih gambar yang sesuai dengan kriteria tertentu (misalnya, pilih semua gambar dengan lampu lalu lintas). Sebagian besar dari reCAPTCHA
- reCAPTCHA: Sistem CAPTCHA canggih dari Google yang sering kali mengharuskan pengenalan objek dalam gambar atau cukup mengklik kotak centang untuk membuktikan bahwa Anda bukan bot.
- hCAPTCHA: Mirip dengan reCAPTCHA, tetapi sering digunakan oleh situs web yang bertujuan untuk solusi yang lebih berfokus pada privasi.
Klaim Kode Bonus Anda untuk solusi captcha terbaik; CapSolver: WEBS. Setelah menukarkannya, Anda akan mendapatkan bonus tambahan 5% setelah setiap pengisian ulang, Tanpa Batas
Bisakah Selenium Ruby Memecahkan CAPTCHA?
Salah satu pertanyaan yang paling umum di antara pengembang adalah apakah Selenium dengan Ruby dapat memecahkan CAPTCHA. Jawaban singkatnya adalah: tidak secara langsung. Selenium sendiri tidak memiliki kemampuan bawaan untuk memecahkan CAPTCHA karena dirancang khusus untuk membedakan antara pengguna manusia dan bot.
Namun, ada beberapa pendekatan untuk menangani CAPTCHA di Selenium Ruby:
- Intervensi Manual: Dalam beberapa kasus, pengembang secara manual memecahkan CAPTCHA selama proses otomatisasi. Namun, ini mengalahkan tujuan otomatisasi penuh.
- Pemecah CAPTCHA Pihak Ketiga: Metode yang paling efektif adalah mengintegrasikan layanan pihak ketiga seperti CapSolver yang mengkhususkan diri dalam memecahkan CAPTCHA menggunakan algoritma canggih dan kecerdasan manusia.
- Memecahkan CAPTCHA Sederhana: Untuk CAPTCHA teks yang sangat dasar, pengembang mungkin menulis skrip khusus untuk mengenali pola, meskipun pendekatan ini terbatas dan sering kali tidak dapat diandalkan.
Meskipun Selenium Ruby tidak dapat memecahkan CAPTCHA sendiri, dengan alat dan layanan yang tepat, sangat mungkin untuk mengotomatiskan proses melewati CAPTCHA, yang akan kita jelajahi dalam panduan ini.
Menyiapkan Selenium di Ruby
Persiapan
- Google Chrome: Instalasi versi terbaru browser Chrome, karena kita akan menggunakan kode untuk berinteraksi dengan Chrome.
- Ruby: Pastikan Ruby terinstal di komputer Anda.
- Selenium-webdriver: Perpustakaan Ruby untuk alat otomatisasi Selenium.
- CapSolver: Dokumentasi CapSolver resmi akan membantu Anda menyelesaikan CAPTCHA.
Setelah Ruby terinstal di komputer Anda, Anda dapat menginstal perpustakaan Selenium WebDriver dengan menjalankan perintah gem install selenium-webdriver
. Periksa versi Chrome Anda, dan berdasarkan itu, unduh driver chromedriver.exe
yang sesuai. Anda dapat menemukan tautan unduhan di lokasi berikut:
- Tautan unduhan 1: Menyediakan versi driver Stable, Beta, Dev, dan Canary terbaru.
- Tautan unduhan 2: Menyediakan semua driver mulai dari versi 113 dan seterusnya.
- Tautan unduhan 3: Menyediakan semua driver untuk versi sebelum 113.
Menganalisis Situs Web Target
Kami akan menggunakan situs web https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
sebagai contoh untuk menyelesaikan reCAPTCHA menggunakan Ruby Selenium.
Sebelum memulai, kita perlu memahami dasar-dasar pengiriman formulir HTML. Dengan mengamati halaman ini dan membuka alat pengembang, kita dapat secara manual menyelesaikan reCAPTCHA dan kemudian mengklik tombol kirim. Tindakan ini mengirimkan permintaan POST, mengirimkan tiga bidang: ex-a
, ex-b
, dan g-recaptcha-response
, seperti yang ditunjukkan di bawah ini:
Ketiga bidang ini sesuai dengan dua elemen input dan satu elemen textarea di bawah formulir dalam kode sumber HTML awal, seperti yang ditunjukkan di bawah ini:
Terjemahan ke Bahasa Indonesia
Mengotomatiskan Proses dengan Ruby Selenium
Bagaimana kita dapat mengotomatiskan seluruh proses menggunakan Ruby Selenium? Berikut langkah-langkahnya:
- Ruby mengarahkan Selenium untuk mengunjungi situs web target.
- Ruby memanggil CapSolver API untuk menyelesaikan reCAPTCHA dan mendapatkan token.
- Mengubah gaya CSS elemen textarea dari
display: none
menjadidisplay: block
untuk membuatnya interaktif dengan Selenium. - Mensimulasikan memasukkan token yang dikembalikan oleh CapSolver ke dalam elemen textarea.
- Mensimulasikan klik tombol submit untuk mengirimkan formulir dan menyelesaikan verifikasi.
Mengunjungi Situs Web Target dengan Ruby Selenium
Pastikan Anda mengganti driver_path
dalam kode di bawah ini dengan jalur aktual ke chromedriver
di komputer Anda.
require 'selenium-webdriver'
# Inisialisasi opsi browser Chrome dan akses situs web target
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
Mendapatkan Token
Untuk menggunakan CapSolver API, kita perlu memberikan websiteKey
, yang dapat ditemukan dengan mencari kata kunci data-sitekey
di sumber halaman:
Sekarang, mari tulis kode Ruby untuk menggunakan CapSolver API untuk secara otomatis menyelesaikan reCAPTCHA:
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,
}
}
# Kirim permintaan pembuatan tugas
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,
}
}
# Kirim permintaan pembuatan tugas
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 "Gagal membuat tugas: #{res.body}"
return
end
puts "Mendapatkan taskId: #{task_id}"
# Loop menunggu untuk mendapatkan hasil tugas
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 "Pemecahan berhasil, token: #{token}"
return token
elsif status == "processing"
puts "Pemecahan sedang berlangsung..."
elsif status == "failed"
puts "Pemecahan gagal! respons: #{res.body}"
return
end
end
end
# Gunakan token di Selenium
cap_solver_api_key = "your_cap_solver_api_key"
website_key = "your_website_key"
page_url = "your_page_url"
driver = Selenium::WebDriver.for :chrome
driver.get(page_url)
token = cap_solver(cap_solver_api_key, website_key, page_url)
if token
# Masukkan token ke dalam halaman web
driver.find_element(:id, 'g-recaptcha-response').send_keys(token)
# Klik tombol submit
driver.find_element(:css, 'button[type="submit"]').click
# Tunggu beberapa saat untuk memastikan tindakan selesai
sleep(5)
# Tutup browser
driver.quit
else
puts "Gagal mendapatkan token"
driver.quit
end
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
# Inisialisasi opsi browser Chrome dan akses situs web target
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
# Panggil CapSolver API untuk menyelesaikan 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 "Gagal menyelesaikan captcha, Tekan tombol apa saja untuk keluar."
STDIN.gets
driver.quit
return
end
# Ubah properti gaya tampilan textarea menjadi blok agar terlihat
driver.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# Simulasikan memasukkan token ke textarea
textarea = driver.find_element(id: 'g-recaptcha-response')
textarea.send_keys(token)
# Simulasikan mengklik dan mengirimkan formulir
submit_btn = driver.find_element(css: "button[type='submit']")
submit_btn.click
puts "Tekan tombol apa saja untuk keluar."
STDIN.gets
driver.quit
Informasi Lebih Lanjut
CapSolver menggunakan teknologi pembuka kunci web otomatis berbasis AI untuk membantu Anda menyelesaikan CAPTCHA dalam hitungan detik. Ini dapat menyelesaikan tidak hanya reCAPTCHA tetapi juga hCaptcha, Geetest, Cloudflare Turnstile, DataDome, AWS WAF, dan banyak lagi. CapSolver juga menyediakan SDK dalam berbagai bahasa serta ekstensi browser. Anda dapat merujuk ke dokumentasi CapSolver untuk informasi lebih lanjut.