Tích Hợp

ChromeDriver không bị phát hiện có tích hợp CaptchaAI

undetected-chromedriver là thư viện Python vá ChromeDriver của Selenium để giảm tín hiệu phát hiện bot. Nó xử lý việc khớp phiên bản Chrome, xóa cờ thuộc tính WebDriver chuẩn và sửa đổi các dấu vân tay trình duyệt khác mà các trang web kiểm tra. Khi một trang web vẫn hiển thị CAPTCHA bất chấp các biện pháp ẩn, CaptchaAI sẽ giải quyết vấn đề đó và trả về mã thông báo mà bạn đưa vào trang.

Hướng dẫn này chỉ ra cách kết hợp cả hai công cụ - sử dụng chromedriver không bị phát hiện để duyệt web ẩn và CaptchaAI cho bất kỳ CAPTCHA nào vẫn xuất hiện.


Những gì bạn cần

Yêu cầu Chi tiết
Khóa API CaptchaAI captchaai.com
Python 3.8+
Trình duyệt Chrome Đã cài đặt trên hệ thống của bạn

Cài đặt phụ thuộc:

pip install undetected-chromedriver requests

Thiết lập cơ bản

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

Giải quyết reCAPTCHA v2 trong phiên ẩn

Bước 1: Điều hướng và giải nén 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

Bước 2: Giải bằng 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")

Bước 3: Nhập mã thông báo và gửi

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}");
                }}
            }}
        }}
    ''')

Hoàn tất quy trình làm việc: Đăng nhập bằng 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()

Giải Cloudflare Turnstile

Đối với các trang web có tiện ích Cloudflare Turnstile, hãy trích xuất khóa trang web và giải quyết thông qua phương pháp 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}";
    ''')

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
Phiên bản Chrome không khớp UC không thể tìm thấy trình điều khiển phù hợp Cập nhật Chrome hoặc chỉ định version_main trong uc.Chrome()
CAPTCHA vẫn xuất hiện Trang web sử dụng dấu vân tay nâng cao Điều này được mong đợi – giải quyết bằng CaptchaAI
Việc tiêm mã thông báo không thành công ID phần tử sai hoặc gọi lại Kiểm tra việc triển khai reCAPTCHA của trang
WebDriverException Chrome bị lỗi Thêm --no-sandbox--disable-dev-shm-usage

Câu hỏi thường gặp

Tại sao nên sử dụng chromedriver không bị phát hiện với CaptchaAI?

Chromedriver không bị phát hiện làm giảm tín hiệu phát hiện bot để ít CAPTCHA xuất hiện hơn. Khi CAPTCHA vẫn kích hoạt, CaptchaAI sẽ giải quyết chúng. Sự kết hợp mang lại tỷ lệ thành công cao nhất.

Chromedriver không bị phát hiện có hoạt động ở chế độ headless không?

Có, nhưng chế độ headless có thể kích hoạt nhiều CAPTCHA hơn. Sử dụng options.add_argument("--headless=new") cho chế độ headless mới của Chrome.

Tôi có thể sử dụng cái này với Selenium Grid không?

Có, nhưng chromedriver không bị phát hiện cần vá tệp nhị phân của trình điều khiển cục bộ. Đối với các thiết lập phân tán, hãy vá trước trình điều khiển trên mỗi nút.

Điều gì sẽ xảy ra nếu trang web phát hiện ra tính năng tự động hóa mặc dù có UC?

Một số trang web sử dụng tính năng phát hiện nâng cao ngoài các bản vá UC. CaptchaAI xử lý CAPTCHA thu được bất kể phương pháp phát hiện nào.


Thêm CaptchaAI vào tự động hóa trình duyệt của bạn

Nhận khóa API của bạn tạicaptchaai.com. Kết hợp trình duyệt ẩn với giải pháp CAPTCHA đáng tin cậy.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.