
Anh Tuan
Data Science Expert

TL;DR: Hướng dẫn này cho thấy cách vượt qua CAPTCHA trong tự động hóa trình duyệt Playwright bằng giải pháp dựa trên AI. Học cách xử lý tự động các thách thức reCAPTCHA và Cloudflare Turnstile với các ví dụ mã hoạt động. Xem tích hợp Playwright của CapSolver
Khi xây dựng tự động hóa trình duyệt với Playwright, việc gặp phải các thách thức CAPTCHA là một trở ngại phổ biến có thể làm dừng quy trình của bạn. Dù bạn đang quét dữ liệu, chạy kiểm tra tự động hay thu thập thông tin thị trường, những thách thức này làm gián đoạn quy trình tự động hóa và yêu cầu can thiệp thủ công - điều này phá vỡ mục đích của việc lập trình tự động.
Hướng dẫn này sẽ hướng dẫn bạn tích hợp giải pháp vượt qua CAPTCHA dựa trên AI vào tự động hóa Playwright, cho phép xử lý mượt mà các thách thức reCAPTCHA và Cloudflare Turnstile mà không làm gián đoạn quy trình của bạn.
CAPTCHA xuất hiện khi các trang web phát hiện hành vi khác với các mô hình lướt web thông thường của con người. Các nguyên nhân phổ biến bao gồm:
Đối với các nhà phát triển sử dụng Playwright cho các nhiệm vụ tự động hóa hợp pháp, việc hiểu tại sao CAPTCHA xuất hiện giúp cả việc ngăn chặn chúng và xử lý chúng một cách trơn tru khi chúng xảy ra.
Các dịch vụ giải quyết CAPTCHA dựa trên AI như CapSolver sử dụng học máy và nhận diện máy tính để tự động nhận diện và giải quyết các thách thức. Quy trình tích hợp mượt mà vào tự động hóa Playwright:
Phương pháp tự động này loại bỏ can thiệp thủ công và giữ cho quy trình tự động của bạn chạy liên tục.
Dữ liệu ngành cho thấy giải pháp dựa trên AI đạt tỷ lệ chính xác 95-99% cho các loại thách thức phổ biến, làm cho chúng đáng tin cậy cho các quy trình tự động hóa sản xuất.
Trước tiên, cài đặt các phụ thuộc cần thiết:
npm install playwright capsolver
Khởi tạo khách hàng CapSolver với khóa API của bạn:
const CapSolver = require('capsolver');
const capSolver = new CapSolver({ apiKey: 'YOUR_API_KEY' });
reCAPTCHA v2 thường hiển thị các thách thức hộp kiểm hoặc bài kiểm tra chọn hình ảnh. Dưới đây là tích hợp hoàn chỉnh:
const { chromium } = require('playwright');
async function solveRecaptchaV2Example() {
// Khởi tạo CapSolver
const CapSolver = require('capsolver');
const solver = new CapSolver({ apiKey: 'YOUR_API_KEY' });
// Khởi động trình duyệt
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
try {
// Điều hướng đến trang đích
await page.goto('https://example.com/login');
// Phát hiện reCAPTCHA v2
const siteKey = await page.evaluate(() => {
const element = document.querySelector('[data-sitekey]');
return element ? element.getAttribute('data-sitekey') : null;
});
if (siteKey) {
console.log('Phát hiện reCAPTCHA v2, đang giải...');
// Giải qua CapSolver
const solution = await solver.recaptcha({
websiteURL: page.url(),
websiteKey: siteKey,
isEnterprise: false
});
// Thiết lập token giải pháp
await page.evaluate((token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) textarea.value = token;
}, solution.gRecaptchaResponse);
// Kích hoạt callback nếu tồn tại
const callback = await page.evaluate(() => {
const el = document.querySelector('[data-callback]');
return el ? el.getAttribute('data-callback') : null;
});
if (callback) {
await page.evaluate((cb) => {
eval(cb + '()');
}, callback);
}
console.log('reCAPTCHA v2 đã vượt qua thành công');
}
// Tiếp tục với tự động hóa của bạn
await page.fill('#username', 'user@example.com');
await page.fill('#password', 'password123');
await page.click('#login-btn');
} catch (error) {
console.error('Lỗi:', error.message);
} finally {
await browser.close();
}
}
solveRecaptchaV2Example();
reCAPTCHA v3 chạy âm thầm ở nền và trả về điểm số thay vì các thách thức trực quan. Dưới đây là cách xử lý nó:
const { chromium } = require('playwright');
async function solveRecaptchaV3Example() {
// Khởi tạo CapSolver
const CapSolver = require('capsolver');
const solver = new CapSolver({ apiKey: 'YOUR_API_KEY' });
// Khởi động trình duyệt
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
try {
await page.goto('https://example.com/dashboard');
// Trích xuất key reCAPTCHA v3
const siteKey = await page.evaluate(() => {
const scripts = document.querySelectorAll('script[src*="recaptcha"]');
for (const script of scripts) {
const src = script.src;
const keyMatch = src.match(/k=([^&]+)/);
if (keyMatch) return keyMatch[1];
}
return null;
});
if (siteKey) {
console.log('Phát hiện reCAPTCHA v3');
// Giải với yêu cầu điểm số
const solution = await solver.recaptcha({
websiteURL: page.url(),
websiteKey: siteKey,
isEnterprise: false,
pageAction: 'homepage'
});
console.log('Token nhận được, điểm số:', solution.score);
// Lưu token cho các yêu cầu API
await page.evaluate((token) => {
window.__captchaToken = token;
}, solution.gRecaptchaResponse);
// Sử dụng token trong các yêu cầu tiếp theo
const response = await page.evaluate(async (token) => {
const res = await fetch('/api/user-profile', {
headers: { 'X-Recaptcha-Token': token }
});
return await res.json();
}, solution.gRecaptchaResponse);
console.log('Dữ liệu nhận được:', response);
}
} catch (error) {
console.error('Lỗi:', error.message);
} finally {
await browser.close();
}
}
solveRecaptchaV3Example();
Cloudflare Turnstile xuất hiện dưới dạng thách thức vô hình hoặc widget xác minh. Dưới đây là cách tiếp cận hoàn chỉnh:
const { chromium } = require('playwright');
async function solveCloudflareTurnstileExample() {
// Khởi tạo CapSolver
const CapSolver = require('capsolver');
const solver = new CapSolver({ apiKey: 'YOUR_API_KEY' });
// Khởi động trình duyệt với cài đặt bảo mật
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 },
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
});
const page = await context.newPage();
try {
await page.goto('https://example-protected.com/', {
waitUntil: 'domcontentloaded',
timeout: 30000
});
// Kiểm tra xem có thách thức Cloudflare không
const isCFChallenge = await page.evaluate(() => {
return document.title.includes('Just a moment') ||
document.querySelector('#cf-challenge') !== null;
});
if (isCFChallenge) {
console.log('Phát hiện thách thức Cloudflare');
// Chờ thách thức hiển thị
await page.waitForTimeout(2000);
// Phát hiện widget Turnstile
const siteKey = await page.evaluate(() => {
const turnstile = document.querySelector('.cf-turnstile');
return turnstile ? turnstile.getAttribute('data-sitekey') : null;
});
if (siteKey) {
console.log('Phát hiện Turnstile, đang giải...');
// Giải Turnstile
const solution = await solver.turnstile({
websiteURL: page.url(),
websiteKey: siteKey
});
console.log('Token nhận được');
// Chèn token vào trang
await page.evaluate((token) => {
// Tạo hoặc cập nhật trường token
let tokenField = document.querySelector('[name="cf-turnstile-response"]');
if (!tokenField) {
tokenField = document.createElement('input');
tokenField.type = 'hidden';
tokenField.name = 'cf-turnstile-response';
document.body.appendChild(tokenField);
}
tokenField.value = token;
// Kích hoạt bất kỳ callback nào
const turnstile = document.querySelector('.cf-turnstile');
if (turnstile && turnstile.dataset.callback) {
window[turnstile.dataset.callback](token);
}
}, solution.token);
// Chờ thách thức được giải
await page.waitForTimeout(3000);
console.log('Turnstile Cloudflare đã vượt qua');
}
}
// Xác minh trang đã tải
const title = await page.title();
console.log('Tiêu đề trang:', title);
} catch (error) {
console.error('Lỗi:', error.message);
} finally {
await browser.close();
}
}
solveCloudflareTurnstileExample();
Dưới đây là ví dụ hoàn chỉnh kết hợp phát hiện, giải quyết và logic thử lại cho mục đích sản xuất:
const { chromium } = require('playwright');
const CapSolver = require('capsolver');
class PlaywrightAutomation {
constructor(apiKey) {
this.solver = new CapSolver({ apiKey });
}
async detectAndSolve(page) {
// Kiểm tra reCAPTCHA v2
const reCaptchaV2Key = await page.evaluate(() => {
const el = document.querySelector('[data-sitekey]');
return el?.getAttribute('data-sitekey');
});
// Kiểm tra Cloudflare Turnstile
const turnstileKey = await page.evaluate(() => {
const el = document.querySelector('.cf-turnstile');
return el?.getAttribute('data-sitekey');
});
if (reCaptchaV2Key) {
console.log('Giải reCAPTCHA v2...');
return await this.solveRecaptchaV2(page, reCaptchaV2Key);
}
if (turnstileKey) {
console.log('Giải Cloudflare Turnstile...');
return await this.solveTurnstile(page, turnstileKey);
}
return null;
}
async solveRecaptchaV2(page, siteKey) {
const solution = await this.solver.recaptcha({
websiteURL: page.url(),
websiteKey: siteKey
});
await page.evaluate((token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) textarea.value = token;
}, solution.gRecaptchaResponse);
return solution;
}
async solveTurnstile(page, siteKey) {
const solution = await this.solver.turnstile({
websiteURL: page.url(),
websiteKey: siteKey
});
await page.evaluate((token) => {
let tokenField = document.querySelector('[name="cf-turnstile-response"]');
if (!tokenField) {
tokenField = document.createElement('input');
tokenField.type = 'hidden';
tokenField.name = 'cf-turnstile-response';
document.body.appendChild(tokenField);
}
tokenField.value = token;
}, solution.token);
return solution;
}
async run(url, steps) {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
try {
await page.goto(url);
// Kiểm tra và giải CAPTCHA nếu cần
await this.detectAndSolve(page);
// Thực hiện các bước tự động hóa của bạn
for (const step of steps) {
await step(page);
}
} finally {
await browser.close();
}
}
}
// Ví dụ sử dụng
const automation = new PlaywrightAutomation('YOUR_API_KEY');
automation.run('https://example.com/form', [
(page) => page.fill('#name', 'John Doe'),
(page) => page.fill('#email', 'john@example.com'),
(page) => page.click('#submit')
]).then(() => console.log('Tự động hóa hoàn tất'))
.catch(err => console.error('Lỗi:', err));
Thị trường quét web đang trải qua sự tăng trưởng đáng kể khi các tổ chức ưu tiên ra quyết định dựa trên dữ liệu, làm cho các giải pháp tự động hóa trở nên ngày càng quan trọng cho quy trình phát triển hiện đại.
Để xem các ví dụ chi tiết hơn, hãy xem tài liệu tích hợp Playwright đầy đủ và học cách tích hợp CapSolver với Playwright.
Có, bằng cách tích hợp với các dịch vụ giải CAPTCHA dựa trên AI như CapSolver, Playwright có thể tự động phát hiện và giải quyết các thách thức. Token giải pháp được gửi một cách chương trình, cho phép tự động hóa tiếp tục mà không cần can thiệp thủ công.
AI-powered solving thường hoàn thành trong 3-10 giây cho hầu hết các loại thử thách. Điều này nhanh hơn đáng kể so với các giải pháp do con người thực hiện, có thể mất 10-45 giây bao gồm cả thời gian chờ.
Có, CapSolver hỗ trợ reCAPTCHA v3 với yêu cầu điểm số tối thiểu có thể tùy chỉnh. Bạn có thể thiết lập ngưỡng điểm số (0.1-0.9) dựa trên nhu cầu của bạn để điều chỉnh mức độ nghiêm ngặt của thử thách.
Mặc dù bạn không thể loại bỏ hoàn toàn CAPTCHAs, bạn có thể giảm tần suất bằng cách sử dụng cài đặt trình duyệt ẩn danh, ngẫu nhiên hóa thời gian giữa các hành động, thay đổi user agents và sử dụng mạng proxy nhà riêng. Tuy nhiên, một số trang web sẽ luôn hiển thị các thử thách bất kể các biện pháp phòng ngừa.
Thiết lập logic thử lại với backoff mũ cho các lần thử thất bại. CapSolver xử lý thành công hầu hết các thử thách, nhưng các phiên bản phức tạp có thể đôi khi yêu cầu nhiều lần thử. Xử lý lỗi đúng cách đảm bảo hệ thống tự động của bạn luôn ổn định.
Có, CapSolver cung cấp SDK và hỗ trợ API cho Playwright, Puppeteer, Selenium và các tiện ích mở rộng trình duyệt trực tiếp. Cách tích hợp tương tự giữa các công cụ với một số khác biệt về cú pháp.
Có, khi sử dụng một cách có trách nhiệm cho các mục đích tự động hóa hợp pháp. CapSolver cam kết thực hành công nghệ đạo đức và cung cấp các dịch vụ giúp các nhà phát triển tự động hóa các quy trình được ủy quyền của họ một cách hiệu quả hơn. Luôn đảm bảo hoạt động tự động của bạn tuân thủ điều khoản dịch vụ của trang web mục tiêu và các luật pháp có liên quan. Xem hướng dẫn tuân thủ của CapSolver tại đây để biết các thực hành tốt nhất.
So sánh các dịch vụ giải CAPTCHA dựa trên AI và dựa trên con người về tốc độ, độ chính xác, khả năng mở rộng, độ tin cậy và hiệu quả về chi phí cho các quy trình tự động hóa hiện đại.

Tìm hiểu cách hoạt động của trình giải reCAPTCHA, vị trí của các API token và cách lập kế hoạch các quy trình kiểm thử chất lượng, thu thập dữ liệu và tự động hóa an toàn với CapSolver.
