Integrasi

Undetected ChromeDriver dengan Integrasi CaptchaAI

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
Komentar dinonaktifkan untuk artikel ini.