undetected-chromedriver adalah pustaka Python yang menambal ChromeDriver Selenium untuk mengurangi sinyal deteksi bot. Ini menangani pencocokan versi Chrome, menghapus tanda sinyal browser otomatis, dan memodifikasi sinyal browser browser lain yang diperiksa situs. Ketika sebuah situs masih menampilkan CAPTCHA meskipun ada tindakan tersembunyi, CaptchaAI menyelesaikannya dan mengembalikan token yang Anda masukkan ke halaman.
Panduan ini menunjukkan cara menggabungkan kedua alat tersebut – gunakan driver chrome yang tidak terdeteksi untuk penjelajahan tersembunyi dan CaptchaAI untuk CAPTCHA apa pun yang masih muncul.
Apa yang Anda butuhkan
| Persyaratan | Detail |
|---|---|
| Kunci API CaptchaAI | captchaai.com |
| Python 3.8+ | |
| peramban Chrome | Diinstal di sistem Anda |
Instal dependensi:
pip install undetected-chromedriver requests
Pengaturan dasar
import undetected_chromedriver as uc
import requests
import time
def create_stealth_browser():
"""Create an undetected Chrome browser instance."""
options = uc.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument("--window-size=1920,1080")
driver = uc.Chrome(options=options)
return driver
Memecahkan reCAPTCHA v2 dalam sesi standar
Langkah 1: Navigasikan dan ekstrak sitekey
API_KEY = "YOUR_API_KEY"
def extract_recaptcha_sitekey(driver):
"""Extract reCAPTCHA v2 sitekey from the page."""
try:
element = driver.find_element("css selector", "[data-sitekey]")
return element.get_attribute("data-sitekey")
except Exception:
# Try finding in iframe src
iframes = driver.find_elements("css selector", "iframe[src*='recaptcha']")
for iframe in iframes:
src = iframe.get_attribute("src")
if "k=" in src:
return src.split("k=")[1].split("&")[0]
return None
Langkah 2: Selesaikan dengan CaptchaAI
def solve_recaptcha_v2(sitekey, pageurl):
"""Submit reCAPTCHA v2 to CaptchaAI and return the token."""
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(20)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
Langkah 3: Suntikkan token dan kirimkan
def inject_recaptcha_token(driver, token):
"""Inject the solved token into the page and submit."""
driver.execute_script(f'''
document.getElementById("g-recaptcha-response").innerHTML = "{token}";
document.getElementById("g-recaptcha-response").style.display = "block";
''')
# If there's a callback function, trigger it
driver.execute_script(f'''
if (typeof ___grecaptcha_cfg !== 'undefined') {{
var clients = ___grecaptcha_cfg.clients;
for (var key in clients) {{
var client = clients[key];
if (client && client.callback) {{
client.callback("{token}");
}}
}}
}}
''')
Alur kerja lengkap: Masuk dengan reCAPTCHA
import undetected_chromedriver as uc
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_recaptcha(sitekey, pageurl):
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": sitekey, "pageurl": pageurl, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(20)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
def main():
driver = uc.Chrome()
try:
# Navigate to target page
driver.get("https://staging.example.com/qa-login")
time.sleep(3)
# Fill in form fields
driver.find_element("id", "username").send_keys("user")
driver.find_element("id", "password").send_keys("pass")
# Extract sitekey
element = driver.find_element("css selector", "[data-sitekey]")
sitekey = element.get_attribute("data-sitekey")
pageurl = driver.current_url
print(f"Sitekey: {sitekey}")
# Solve CAPTCHA
token = solve_recaptcha(sitekey, pageurl)
print(f"Token: {token[:50]}...")
# Inject token
driver.execute_script(
f'document.getElementById("g-recaptcha-response").innerHTML = "{token}";'
)
# Submit form
driver.find_element("id", "submit-btn").click()
time.sleep(3)
print(f"Current URL: {driver.current_url}")
finally:
driver.quit()
if __name__ == "__main__":
main()
Memecahkan Cloudflare Turnstile
Untuk situs dengan widget Cloudflare Turnstile, ekstrak sitekey dan selesaikan melalui metode Turnstile:
def solve_turnstile(sitekey, pageurl):
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "turnstile",
"sitekey": sitekey, "pageurl": pageurl, "json": 1
}).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit error: {submit.get('request')}")
task_id = submit["request"]
time.sleep(10)
for _ in range(30):
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
return result["request"]
if result.get("request") != "CAPCHA_NOT_READY":
raise RuntimeError(f"Solve error: {result['request']}")
time.sleep(5)
raise TimeoutError("Solve timed out")
# Inject Turnstile token
def inject_turnstile_token(driver, token):
driver.execute_script(f'''
var input = document.querySelector('[name="cf-turnstile-response"]');
if (input) input.value = "{token}";
''')
Pemecahan masalah
| Masalah | Sebab | Perbaiki |
|---|---|---|
| Versi Chrome tidak cocok | UC tidak dapat menemukan driver yang cocok | Perbarui Chrome atau tentukan version_main di uc.Chrome() |
| CAPTCHA masih muncul | Situs menggunakan sinyal browser tingkat lanjut | Hal ini diharapkan – selesaikan dengan CaptchaAI |
| pengaturan token gagal | ID elemen atau callback salah | Periksa implementasi reCAPTCHA halaman tersebut |
WebDriverException |
Chrome mogok | Tambahkan --no-sandbox dan --disable-dev-shm-usage |
Pertanyaan Umum
Mengapa menggunakan driver chrome yang tidak terdeteksi dengan CaptchaAI?
Chromedriver yang tidak terdeteksi mengurangi sinyal deteksi bot sehingga lebih sedikit CAPTCHA yang muncul. Saat CAPTCHA masih terpicu, CaptchaAI menyelesaikannya. Kombinasi tersebut memberikan tingkat keberhasilan tertinggi.
Apakah driver chrome yang tidak terdeteksi berfungsi dalam mode headless?
Ya, tapi mode headless dapat memicu lebih banyak CAPTCHA. Gunakan options.add_argument("--headless=new") untuk mode headless baru Chrome.
Bisakah saya menggunakan ini dengan Selenium Grid?
Ya, tetapi driver chrome yang tidak terdeteksi perlu menambal biner driver lokal. Untuk penyiapan terdistribusi, lakukan pra-patch driver pada setiap node.
Bagaimana jika situs mendeteksi otomatisasi meskipun ada UC?
Beberapa situs menggunakan deteksi tingkat lanjut di luar patch UC. CaptchaAI menangani CAPTCHA yang dihasilkan apa pun metode deteksinya.
Tambahkan CaptchaAI ke otomatisasi browser Anda
Dapatkan kunci API Anda dicaptchaai.com. Gabungkan penelusuran standar dengan penyelesaian CAPTCHA yang andal.
Panduan terkait
- Cara Mengatasi reCAPTCHA v2 Menggunakan API
- Cara Mengatasi Cloudflare Turnstile Menggunakan API
- Puppeteer + CaptchaAI untuk QA
- Chrome headless vs Berkepala untuk Pemecahan CAPTCHA