CDP API
Agent Browser của Scrapeless mở rộng chức năng CDP (Chrome DevTools Protocol) tiêu chuẩn, bổ sung một loạt các hàm tùy chỉnh mạ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 hàm CDP liên quan đến việc xử lý CAPTCHA.
Tính năng CAPTCHA Solver
Tổng quan tính năng
Agent Browser bao gồm khả năng giải CAPTCHA nâng cao, tự động xử lý các loại CAPTCHA phổ biến xuất hiện trên các trang web.
Các loại CAPTCHA được hỗ trợ
- reCaptcha
- Cloudflare Turnstile
- Cloudflare 5s Challenge
- AWS WAF
Cơ chế giám sát sự kiện
Các sự kiện cốt lõi
Agent Browser cung cấp ba sự kiện cốt lõi để giám sát quá trình giải CAPTCHA:
| Event Name | Mô tả |
|---|---|
Captcha.detected | Đã phát hiện CAPTCHA |
Captcha.solveFinished | Đã hoàn thành giải CAPTCHA |
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
// Listen for CAPTCHA solving events
const client = await page.createCDPSession();
client.on('Captcha.detected', (result) => {
console.log('Captcha detected:', result);
});
await new Promise((resolve, reject) => {
client.on('Captcha.solveFinished', (result) => {
if (result.success) resolve();
});
client.on('Captcha.solveFailed', () =>
reject(new Error('Captcha solve failed'))
);
setTimeout(() =>
reject(new Error('Captcha solve timeout')),
5 * 60 * 1000
);
});API cấu hình nâng cao
Agent Browser 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 CAPTCHA solver. Các API sau đây đượ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 CAPTCHA solver |
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 live url 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 CAPTCHA solver.
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 nhập liệu từ 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 live url 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('Failed to get current page URL:', error);
} else {
logger.info('Current page URL:', liveURL);
}
await browser.close();
})();6. Captcha.imageToText
Giải Image Captcha
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,
})