API CDP

Trình duyệt cạo dữ liệu Scrapeless mở rộng chức năng CDP (Chrome DevTools Protocol) tiêu chuẩn, bổ sung một loạt các chức năng tùy chỉnh mạnh mẽ để nâng cao khả năng tự động hóa trình duyệt. Tài liệu này chủ yếu đề cập đến các chức năng CDP liên quan đến xử lý CAPTCHA.

Các tính năng giải CAPTCHA

Tổng quan tính năng

Trình duyệt cạo dữ liệu bao gồm các khả năng giải CAPTCHA nâng cao, tự động xử lý các loại CAPTCHA phổ biến được tìm thấy trên các trang web.

Các loại CAPTCHA được hỗ trợ

  • reCaptcha
  • Cloudflare Turnstile
  • Thử thách 5 giây của Cloudflare
  • AWS WAF

Cơ chế giám sát sự kiện

Các sự kiện cốt lõi

Trình duyệt cạo dữ liệu cung cấp ba sự kiện cốt lõi để giám sát quá trình giải CAPTCHA:

Tên sự kiệnMô tả
Captcha.detectedCAPTCHA được phát hiện
Captcha.solveFinishedGiải CAPTCHA hoàn tất
Captcha.solveFailedGiải CAPTCHA thất bại

Cấu trúc dữ liệu phản hồi sự kiện

TrườngKiểuMô tả
typestringLoại CAPTCHA: recaptcha turnstile
successbooleanKết quả giải
messagestringThông báo trạng thái: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID"
token?stringToken được trả về khi thành công (tùy chọn)

Ví dụ triển khai

// Lắng nghe các sự kiện giải CAPTCHA
const client = await page.createCDPSession();
 
client.on('Captcha.detected', (result) => {
  console.log('CAPTCHA được phát hiện:', result);
});
 
await new Promise((resolve, reject) => {
  client.on('Captcha.solveFinished', (result) => {
    if (result.success) resolve();
  });
  client.on('Captcha.solveFailed', () =>
    reject(new Error('Giải CAPTCHA thất bại'))
  );
  setTimeout(() =>
      reject(new Error('Giải CAPTCHA hết thời gian')),
    5 * 60 * 1000
  );
});

API cấu hình nâng cao

Trình duyệt cạo dữ liệu cung cấp một loạt các API nâng cao để kiểm soát chi tiết hành vi của bộ giải CAPTCHA. Các API sau được hỗ trợ:

Tên APIMô tả
Captcha.setTokenĐặt token xác thực cho dịch vụ CAPTCHA
Captcha.setConfigCấu hình tất cả các tham số của bộ giải CAPTCHA
Captcha.solveKích hoạt thủ công quá trình giải CAPTCHA
Agent.clickMô phỏng một cú nhấp chuột
Agent.liveURLLấy URL trực tiếp của trang phiên hiện tại

Mô tả chi tiết API

1. Captcha.setConfig

Cấu hình tất cả các tham số cho bộ giải CAPTCHA.

await client.send('Captcha.setConfig', {
    config: JSON.stringify(
        {
            apiKey: "your-token",
            autoSolve: true,
            enabledForRecaptcha: true,
            enabledForRecaptchaV3: true,
            enabledForTurnstile: true
        }
    )
});

2. Captcha.solve

Kích hoạt thủ công quá trình giải CAPTCHA.

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    await cdpSession.solveCaptcha({ timeout: 30000 });
})();

3. Agent.click

Mô phỏng một cú nhấp chuột.

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    await cdpSession.realClick('button');
})();

4. Agent.type

Mô phỏng một đầu vào bàn phím.

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    await cdpSession.realFill('input', 'Hello, Scrapeless!');
})();

5. Agent.liveURL

Lấy URL trực tiếp của trang phiên hiện tại.

const { Puppeteer, log as Log, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
const logger = Log.withPrefix('puppeteer-example');
 
(async () => {
    const browser = await Puppeteer.connect({
      sessionName: 'sdk_test',
      sessionTTL: 180,
      proxyCountry: 'US',
      sessionRecording: true,
      defaultViewport: null
    });
    const page = await browser.newPage();
    await page.goto('https://www.scrapeless.com');
    const cdpSession = await createPuppeteerCDPSession(page);
 
    const { error, liveURL } = await cdpSession.liveURL();
    if (error) {
      logger.error('Không thể lấy URL trang hiện tại:', error);
    } else {
      logger.info('URL trang hiện tại:', liveURL);
    }
    await browser.close();
})();

6. Captcha.imageToText

Giải Captcha hình ảnh

const { Puppeteer, createPuppeteerCDPSession } = require('@scrapeless-ai/sdk');
 
const browser = await Puppeteer.connect({
  sessionName: 'sdk_test',
  sessionTTL: 180,
  proxyCountry: 'US',
  sessionRecording: true,
  defaultViewport: null
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
const cdpSession = await createPuppeteerCDPSession(page);
 
await cdpSession.imageToText({
  imageSelector: '.captcha__image',
  inputSelector: 'input[name="captcha"]',
  timeout: 30000,
})