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ện | Mô tả |
|---|---|
Captcha.detected | CAPTCHA được phát hiện |
Captcha.solveFinished | Giải CAPTCHA hoàn tất |
Captcha.solveFailed | Giải CAPTCHA thất bại |
Cấu trúc dữ liệu phản hồi sự kiện
| Trường | Kiểu | Mô tả |
|---|---|---|
type | string | Loại CAPTCHA: recaptcha turnstile |
success | boolean | Kết quả giải |
message | string | Thông báo trạng thái: "NOT_DETECTED" "SOLVE_FINISHED" "SOLVE_FAILED" "INVALID" |
token? | string | Token đượ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 API | Mô tả |
|---|---|
Captcha.setToken | Đặt token xác thực cho dịch vụ CAPTCHA |
Captcha.setConfig | Cấu hình tất cả các tham số của bộ giải CAPTCHA |
Captcha.solve | Kích hoạt thủ công quá trình giải CAPTCHA |
Agent.click | Mô phỏng một cú nhấp chuột |
Agent.liveURL | Lấ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,
})