Trường Hợp Sử Dụng

Các vấn đề và giải pháp về CAPTCHA của trình duyệt headless

Các trình duyệt không có giao diện người dùng kích hoạt CAPTCHA thường xuyên hơn các trình duyệt thông thường. Các trang web phát hiện Chrome, Firefox và WebKit không có giao diện người dùng thông qua dấu vân tay JavaScript và đưa ra các thách thức để chặn tự động hóa. Đây là cách xử lý từng vấn đề.

Tại sao trình duyệt không có giao diện nhận được nhiều CAPTCHA hơn

Phương pháp phát hiện Kiểm tra trang web nào
thuộc tính WebDriver chuẩn Đặt thành true ở chế độ headless
Kích thước cửa sổ Headless thường sử dụng mặc định 800x600
Trình kết xuất WebGL Trả về headless "SwiftShader"
Giao thức công cụ dành cho nhà phát triển của Chrome Cổng CDP mở
Thiếu plugin Không có trình xem PDF, Flash, v.v.
API quyền Phản ứng khác nhau trong headless
Chuỗi tác nhân người dùng Chuỗi con "HeadlessChrome"

Khi các tín hiệu này kết hợp, các hệ thống chống bot (reCAPTCHA, Cloudflare, DataDome) sẽ cho điểm tin cậy thấp hơn và hiển thị CAPTCHA.

Giải pháp 1: Giải CAPTCHA qua API

Thay vì cố gắng tránh hoàn toàn CAPTCHA, hãy giải quyết chúng khi chúng xuất hiện. CaptchaAI hoạt động với mọi trình duyệt headless vì nó giải quyết được CAPTCHA phía máy chủ.

Selen (Python)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
import time

API_KEY = "YOUR_API_KEY"

options = Options()
options.add_argument("--headless=new")
options.add_argument("")
driver = webdriver.Chrome(options=options)

driver.get("https://staging.example.com/qa-login")

# Check for CAPTCHA
recaptcha = driver.find_elements("class name", "g-recaptcha")
if recaptcha:
    site_key = recaptcha[0].get_attribute("data-sitekey")

    # Solve via CaptchaAI
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": driver.current_url
    })
    task_id = resp.text.split("|")[1]

    while True:
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        token = result.text.split("|")[1]
        break

    # Inject token
    driver.execute_script(
        f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
    )
    driver.find_element("css selector", "form").submit()

Puppeteer (Node.js)

const puppeteer = require("puppeteer");
const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

const browser = await puppeteer.launch({ headless: "new" });
const page = await browser.newPage();
await page.goto("https://staging.example.com/qa-login");

// Check for CAPTCHA
const siteKey = await page
  .$eval(".g-recaptcha", (el) => el.getAttribute("data-sitekey"))
  .catch(() => null);

if (siteKey) {
  const submit = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: API_KEY,
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: page.url(),
    },
  });
  const taskId = submit.data.split("|")[1];

  let token;
  while (true) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId },
    });
    if (result.data === "CAPCHA_NOT_READY") continue;
    token = result.data.split("|")[1];
    break;
  }

  await page.evaluate((t) => {
    document.getElementById("g-recaptcha-response").innerHTML = t;
  }, token);
  await page.click('button[type="submit"]');
}

Giải pháp 2: Giảm tần suất CAPTCHA

Mặc dù bạn luôn có thể giải CAPTCHA thông qua API nhưng việc giảm tần suất chúng xuất hiện sẽ giúp tiết kiệm thời gian và chi phí.

Bản vá thuộc tính WebDriver chuẩn

# Selenium
options.add_argument("")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
// Puppeteer
await page.evaluateOnNewDocument(() => {
  Object.defineProperty(navigator, "webdriver", { get: () => false });
});

Đặt kích thước cửa sổ thực tế

# Selenium
driver.set_window_size(1920, 1080)
// Puppeteer
await page.setViewport({ width: 1920, height: 1080 });

Sử dụng plugin tàng hình

# Puppeteer
npm install puppeteer-extra puppeteer (cấu hình QA)
const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer (cấu hình QA)");
puppeteer.use(StealthPlugin());
# Selenium
pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome(headless=True)

Giải pháp 3: Xử lý Cloudflare Challenge

Các trang thử thách Cloudflare yêu cầu nhiều hơn một mã thông báo - bạn cần có cookie <staging-session-cookie>:

# CaptchaAI handles full Cloudflare challenges
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": "http://user:pass@proxy:port",
    "proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]

# Result includes <staging-session-cookie> cookie and user_agent
# Use both to make subsequent requests

Các vấn đề thường gặp của trình duyệt

Trình duyệt vấn đề sửa chữa
Chrome headless `
Puppeteer Thiếu plugin trình duyệt Sử dụng puppeteer (cấu hình QA)
Selen Công tắc enable-automation excludeSwitches: ["enable-automation"]
Nhà viết kịch Vân tay WebKit Sử dụng kênh Chrome với các bản vá ẩn
Tất cả Kích thước khung nhìn nhất quán Đặt thành 1920x1080 hoặc chọn ngẫu nhiên

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

Chế độ headless có luôn được phát hiện không?

Không phải lúc nào cũng vậy. Với cấu hình QA chuẩn phù hợp, nhiều trang web sẽ không gắn cờ trình duyệt không có giao diện người dùng của bạn. Nhưng các hệ thống chống bot tinh vi (Cloudflare, PerimeterX) vẫn có thể phát hiện chế độ headless thông qua tính năng lấy dấu vân tay nâng cao.

Tôi có nên sử dụng chế độ đứng đầu thay thế không?

Chế độ đánh đầu giúp giảm khả năng phát hiện nhưng yêu cầu máy chủ hiển thị (Xvfb trên Linux). Phương pháp tiếp cận API của CaptchaAI hoạt động bất kể chế độ head/headless, khiến nó trở thành giải pháp đáng tin cậy hơn.

Tôi có thể tránh hoàn toàn CAPTCHA không?

Không đáng tin cậy. Ngay cả các trình duyệt không có giao diện người dùng được cấu hình tốt cuối cùng cũng kích hoạt CAPTCHA trên quy mô lớn. Sử dụng CaptchaAI làm lớp xử lý CAPTCHA đảm bảo quá trình tự động hóa của bạn tiếp tục khi có thử thách xuất hiện.

Hướng dẫn liên quan

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