Cách tích hợp CapSolver với Playwright | Hướng dẫn hoàn chỉnh 2025

Anh Tuan
Data Science Expert
04-Sep-2025

Playwright là gì?
Playwright là một khung kiểm thử tự động hóa trình duyệt hiện đại được phát triển bởi Microsoft. Nó hỗ trợ tự động hóa cho Chromium, Firefox và WebKit (tương ứng với Chrome, Firefox và Safari). Nó cung cấp một API mạnh mẽ để điều khiển trình duyệt, lựa chọn phần tử, tương tác biểu mẫu, chặn mạng và hơn thế nữa — làm cho nó lý tưởng cho các tác vụ yêu cầu tương tác sâu sắc với các trang web.
Các tính năng chính của Playwright
Bất kỳ trình duyệt nào, bất kỳ nền tảng nào, một API
- Đa trình duyệt: Playwright hỗ trợ tất cả các công cụ hiển thị hiện đại, bao gồm Chromium, WebKit và Firefox.
- Đa nền tảng: Chạy các bài kiểm tra trên Windows, Linux và macOS — cục bộ hoặc trong CI — không có đầu hoặc có đầu.
- Đa ngôn ngữ: Sử dụng API Playwright với TypeScript, JavaScript, Python, .NET hoặc Java.
- Kiểm thử web di động: Mô phỏng tự nhiên Google Chrome cho Android và Mobile Safari. Cùng một công cụ hiển thị chạy trên Máy tính để bàn và trên Cloud.
Trường hợp sử dụng điển hình
- Trích xuất nội dung động: Trích xuất dữ liệu được hiển thị thông qua JavaScript.
- Xử lý các tương tác phức tạp: Hữu ích cho các trang yêu cầu đăng nhập hoặc quy trình làm việc nhiều bước để truy cập dữ liệu.
- Trích xuất dữ liệu từ các ứng dụng SPA: Thu thập dữ liệu từ các trang được xây dựng bằng các khung như Vue hoặc React.
- Kiểm thử tự động: Xác thực chức năng trang trong khi thu thập dữ liệu.
- Tự động hóa chế độ không có đầu: Thực hiện tất cả các hành động mà không cần GUI, phù hợp với môi trường máy chủ.
Cách sử dụng cơ bản của Playwright
Sử dụng Playwright trong Node.js:
bash
npm i playwright
npx playwright install # Cài đặt tất cả các trình duyệt (Chromium, Firefox, WebKit)
Ví dụ: Lấy tất cả tiêu đề blog từ CapSolver
Trong ví dụ bên dưới, chúng ta sử dụng Playwirght để điều hướng đến blog CapSolver và lấy tất cả tiêu đề bài đăng blog <h5> từ trang

javascript
const { chromium } = require('playwright');
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
});
const [page] = context.pages();
await page.goto('https://www.capsolver.com/blog/All');
const h5Titles = await page.evaluate(() => {
const headings = Array.from(document.querySelectorAll('h5'));
return headings.map(heading => heading.textContent.trim());
});
console.log(h5Titles);
await context.close();
})();
Cách tích hợp tiện ích mở rộng CapSolver với Playwright
Playwright đủ mạnh để tải các tiện ích mở rộng trình duyệt giống như một trình duyệt thông thường.
- Tải xuống và giải nén tệp ZIP tiện ích mở rộng CapSolver mới nhất từ GitHub chính thức
- Chỉ định đường dẫn tiện ích mở rộng trong các đối số khởi chạy Playwright bằng
--disable-extensions-exceptvà--load-extension.
javascript
const { chromium } = require('playwright');
const extensionPath = 'path/to/capsolver extension';
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`,
],
});
const [page] = context.pages();
await page.goto('https://www.capsolver.com/blog/All');
await browser.close();
})();
Giải quyết reCAPTCHA v2 bằng tiện ích mở rộng CapSolver
Các loại CAPTCHA như reCAPTCHA v2/v3, Cloudflare Turnstile, AWS WAF, được sử dụng rộng rãi trên hàng nghìn trang web. Mặc dù phổ biến, nhưng các CAPTCHA này thường có cấu trúc DOM nhất quán và có thể phát hiện được. Đó là nơi Tiện ích mở rộng CapSolver hoạt động — nó tự động phát hiện và giải quyết chúng mà không cần tương tác thủ công.
Hãy lấy reCAPTCHA v2 làm ví dụ để chứng minh cách giải quyết nó bằng Tiện ích mở rộng CapSolver trong Playwright.
Lưu ý: Trừ khi được nêu rõ, các ví dụ sau đây sử dụng chế độ nhấp (/assets/config.js -> reCaptchaMode: 'click').
⚠️ Đừng quên giải nén tệp zip tiện ích mở rộng và cấu hình
apiKeycủa bạn trong/assets/config.js
javascript
const { chromium } = require('playwright');
// Bước 1: Tải xuống tiện ích mở rộng từ GitHub: https://github.com/capsolver/capsolver-browser-extension/releases
// Bước 2: Giải nén tệp tiện ích mở rộng và đặt apiKey của bạn trong /assets/config.js
const extensionPath = 'path/to/CapSolver Browser Extension-v1.16.0';
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`,
'--lang=en-US'
],
});
const [page] = context.pages();
await page.goto('https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php');
await page.waitForSelector('form[action="/recaptcha-v2-checkbox.php"]');
// Tiện ích mở rộng sẽ tự động phát hiện và giải quyết reCAPTCHA.
await page.waitForTimeout(15000); // Chờ giải quyết
await page.click('button[type="submit"]');
await page.waitForTimeout(5000);
await context.close();
})();
⚠️ Tiện ích mở rộng CapSolver cũng hỗ trợ nhiều tùy chọn cấu hình hữu ích. Dưới đây là một số ví dụ phổ biến (Lưu ý: Tất cả các cấu hình được đặt trong
/assets/config.js)
Tùy chọn cấu hình: solvedCallback
Như bạn có thể đã nhận thấy, trong mã trước đó, chúng tôi đã chờ 15 giây sau khi tải trang trước khi nhấp vào nút gửi. Sự chậm trễ này nhằm mục đích cung cấp cho tiện ích mở rộng CapSolver đủ thời gian để tự động giải quyết reCAPTCHA. Tuy nhiên, cách tiếp cận này không lý tưởng — đôi khi CAPTCHA được giải quyết nhanh hơn nhiều và trong điều kiện mạng kém, nó có thể mất nhiều hơn 15 giây.
Đó là nơi solvedCallback hoạt động. Nó cung cấp một giải pháp tốt hơn bằng cách kích hoạt một hàm gọi lại khi CAPTCHA đã được giải quyết, thông báo cho bạn rằng xác minh đã hoàn tất. Bạn có thể cấu hình solvedCallback trong /assets/config.js bằng cách định nghĩa tên hàm tùy chỉnh — theo mặc định, đó là captchaSolvedCallback. Sau đó, hãy sử dụng page.exposeFunction trong Playwright để hiển thị hàm này trong ngữ cảnh trình duyệt.
Bây giờ, hãy cải thiện mã trước đó của chúng ta bằng cách tiếp cận này.
javascript
const { chromium } = require('playwright');
const extensionPath = 'path/to/CapSolver Browser Extension-v1.16.0';
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`,
'--lang=en-US'
],
});
const [page] = context.pages();
await page.goto('https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php');
await page.waitForSelector('form[action="/recaptcha-v2-checkbox.php"]');
await page.exposeFunction('captchaSolvedCallback', async () => {
console.log('Captcha đã được giải quyết!');
const iframe = await page.$('iframe[src*="recaptcha"]');
if (iframe) {
const frame = await iframe.contentFrame();
const finished = await frame.evaluate(() => {
const element = document.querySelector('.recaptcha-checkbox-border');
return element && window.getComputedStyle(element).display === 'none';
});
if (finished) {
console.log('Xác minh đã hoàn tất!');
await page.click('button[type="submit"]');
await page.waitForTimeout(3000);
await context.close();
} else {
console.log('Xác minh chưa hoàn tất. Thử lại...');
}
}
});
})();
Đối với reCAPTCHA v2, đôi khi nhiều thử thách hình ảnh có thể xuất hiện. Vì vậy, sau mỗi thử thách, chúng ta kiểm tra xem hộp kiểm "Tôi không phải là người máy" đã được chọn chưa — nếu nó biến mất, quá trình xác minh được coi là đã hoàn tất.
Tùy chọn cấu hình: manualSolving
Trong các ví dụ trước đó, việc giải quyết CAPTCHA bắt đầu ngay lập tức khi tải trang. Tuy nhiên, trong một số trường hợp, bạn có thể cần thực hiện các tác vụ khác trước tiên — như nhập tên người dùng/mật khẩu — trước khi kích hoạt việc giải quyết CAPTCHA. Bắt đầu quá sớm có thể khiến mã thông báo hết hạn.
Để xử lý điều này, hãy đặt manualSolving: true trong /assets/config.js, cho phép bạn tự động kích hoạt quá trình giải quyết CAPTCHA.
Có hai cách để kích hoạt giải quyết:
- Mô phỏng việc nhấp vào nút CapSolver trong tiện ích mở rộng.
- Thực thi:
window.postMessage({ type: 'capsolverSolve' });
⚠️ Lưu ý: Tính năng này chỉ được hỗ trợ trong các phiên bản tiện ích mở rộng cao hơn v1.16.0!
Ví dụ:
javascript
const { chromium } = require('playwright');
const extensionPath = 'path/to/CapSolver Browser Extension-v1.16.0';
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`,
'--lang=en-US'
],
});
const [page] = context.pages();
await page.goto('https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php');
await page.waitForSelector('form[action="/recaptcha-v2-checkbox.php"]');
// Mô phỏng việc điền thông tin đăng nhập
await page.evaluate(() => {
const inputA = document.querySelector('input[name="ex-a"]');
inputA.value = 'username';
const inputB = document.querySelector('input[name="ex-b"]');
inputB.value = 'password';
});
// Mô phỏng các sự chậm trễ hoặc hoạt động của người dùng khác
for (let i = 1; i <= 5; i++) {
await page.waitForTimeout(1000);
console.log(`Đã chờ ${i} giây...`);
}
console.log('Bắt đầu giải quyết CAPTCHA...');
// Phương pháp 1: Mô phỏng việc nhấp vào nút CapSolver
await page.evaluate(() => {
document.querySelector('#capsolver-solver-tip-button').click();
});
// Phương pháp 2: Kích hoạt bằng postMessage
// await page.evaluate(() => {
// window.postMessage({ type: 'capsolverSolve' });
// });
await page.exposeFunction('captchaSolvedCallback', async () => {
console.log('Captcha đã được giải quyết!');
const iframe = await page.$('iframe[src*="recaptcha"]');
if (iframe) {
const frame = await iframe.contentFrame();
const finished = await frame.evaluate(() => {
const element = document.querySelector('.recaptcha-checkbox-border');
return element && window.getComputedStyle(element).display === 'none';
});
if (finished) {
console.log('Xác minh đã hoàn tất!');
await page.click('button[type="submit"]');
await page.waitForTimeout(3000);
await context.close();
} else {
console.log('Xác minh chưa hoàn tất. Thử lại.');
}
}
});
})();
Tùy chọn cấu hình: reCaptchaMode
Cài đặt reCaptchaMode hỗ trợ hai chế độ: click và token.
- Chế độ click mô phỏng tương tác của con người — nhấp qua các thử thách hình ảnh.
- Chế độ token trực tiếp sử dụng API CapSolver để lấy mã thông báo giải pháp mà không cần tương tác UI.
Nếu bạn gặp phải nhiều vòng lựa chọn hình ảnh bằng chế độ click, có thể là do điểm dấu vân tay trình duyệt thấp. Nên chuyển sang chế độ token để có độ tin cậy tốt hơn.
| Chế độ Click | Chế độ Token |
|---|---|
![]() |
![]() |
Tùy chọn cấu hình: showSolveButton
Khi showSolveButton được đặt thành false (mặc định là true), nút CapSolver sẽ không còn được hiển thị trên trang nữa. Tuy nhiên, điều này sẽ không ảnh hưởng đến chức năng giải quyết CAPTCHA bình thường.

Tùy chọn cấu hình: useProxy
Sau khi đặt useProxy: true, bạn có thể chỉ định các tham số sau: proxyType, hostOrIp, port, proxyLogin và proxyPassword. Với thiết lập này, chúng ta sẽ sử dụng proxy tùy chỉnh của bạn để giải quyết CAPTCHA. Khi nào bạn nên sử dụng proxy của riêng mình? Thông thường, trong các trường hợp sau:
- Proxy của bạn cung cấp chất lượng tốt hơn (ví dụ: mã thông báo reCAPTCHA được tạo bằng proxy của bạn nhận được điểm cao hơn) hoặc tốc độ giải quyết nhanh hơn;
- Trong một số trường hợp, IP được sử dụng để giải quyết CAPTCHA phải giống với IP được sử dụng để gửi mã thông báo.
Trên đây là một số tùy chọn cấu hình thường được sử dụng. Bạn có thể điều chỉnh các cài đặt khác theo nhu cầu thực tế của mình. Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với hỗ trợ khách hàng của chúng tôi.
Giải quyết CAPTCHA ImageToText bằng tiện ích mở rộng CapSolver
Không giống như các CAPTCHA của bên thứ ba như reCAPTCHA, Cloudflare Turnstile, AWS WAF hoặc GeeTest, có một loại CAPTCHA khác yêu cầu nhận dạng chữ cái hoặc chữ số từ hình ảnh. Chúng tôi gọi đây là CAPTCHA ImageToText. Chúng thường trông như thế này:

ImageToText là một CAPTCHA được chính quản trị viên trang web triển khai. Không giống như CAPTCHA của bên thứ ba, CAPTCHA ImageToText được chủ sở hữu trang web tùy chỉnh. Vì các CAPTCHA này khác nhau về vị trí trên các trang web và trang khác nhau, nên Tiện ích mở rộng CapSolver không thể tự động phát hiện hình ảnh nào là CAPTCHA. Do đó, bạn phải thông báo rõ ràng cho Tiện ích mở rộng CapSolver trong mã của mình. Đây là cách thực hiện:
- Thêm thuộc tính
capsolver-image-to-text-sourcecó giá trị0vào phần tử hình ảnh của CAPTCHA; - Thêm thuộc tính
capsolver-image-to-text-resultcó giá trị0vào trường nhập nơi kết quả nên được điền vào.
Các thuộc tính này — capsolver-image-to-text-source và capsolver-image-to-text-result — có thể được cấu hình trong /assets/config.js bằng các trường textCaptchaSourceAttribute và textCaptchaResultAttribute, tương ứng.
Hãy cùng xem xét một ví dụ sử dụng trang:
https://captcha.com/demos/features/captcha-demo.aspx
Đầu tiên, hãy kiểm tra nguồn trang để định vị phần tử hình ảnh CAPTCHA và trường nhập kết quả. Trong trường hợp này:
- ID phần tử hình ảnh CAPTCHA:
demoCaptcha_CaptchaImage - ID trường nhập cho kết quả:
captchaCode
(Ảnh chụp màn hình bên dưới)
Bây giờ, chúng ta hãy sử dụng Playwright để tự động giải quyết CAPTCHA này bằng cách đánh dấu các phần tử này cho phù hợp:
javascript
const { chromium } = require('playwright');
// Bước 1: Lấy tiện ích mở rộng từ GitHub (https://github.com/capsolver/capsolver-browser-extension/releases)
// Bước 2: Giải nén tệp zip tiện ích mở rộng và cấu hình apiKey của bạn trong /assets/config.js
const extensionPath = 'path/to/CapSolver Browser Extension-v1.16.0';
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: [
`--disable-extensions-except=${extensionPath}`,
`--load-extension=${extensionPath}`,
'--lang=en-US'
],
});
const [page] = context.pages();
await page.goto('https://captcha.com/demos/features/captcha-demo.aspx');
await page.waitForSelector('#demoCaptcha_CaptchaImage');
// Thông báo cho Tiện ích mở rộng CapSolver vị trí của hình ảnh CAPTCHA
await page.evaluate(() => {
const imgElement = document.querySelector('#demoCaptcha_CaptchaImage');
if (imgElement) {
imgElement.setAttribute('capsolver-image-to-text-source', '0');
}
});
// Thông báo cho Tiện ích mở rộng CapSolver vị trí kết quả nhận dạng nên được nhập
await page.evaluate(() => {
const resultElement = document.querySelector('#captchaCode');
if (resultElement) {
resultElement.setAttribute('capsolver-image-to-text-result', '0');
}
});
// Chờ CAPTCHA được giải quyết và gửi biểu mẫu
await page.exposeFunction('captchaSolvedCallback', async () => {
console.log('Captcha đã được giải quyết!');
await page.waitForTimeout(3000);
await page.click('#validateCaptchaButton');
await page.waitForTimeout(3000);
await context.close();
});
})();
Kết quả:

Cách tích hợp CapSolver API với Playwright
Sử dụng Tiện ích mở rộng CapSolver rất tiện lợi và nhanh chóng, nhưng nếu bạn là một nhà phát triển giàu kinh nghiệm, chúng tôi khuyến khích bạn nên sử dụng tích hợp API hơn. So với phương pháp dựa trên tiện ích mở rộng, phương pháp API cung cấp một số lợi thế chính:
- Các tham số tùy chỉnh hơn – Bạn có thể tinh chỉnh các yêu cầu của mình để phù hợp hơn với hầu hết mọi trường hợp CAPTCHA.
- Kiểm soát tốt hơn – Bạn có thể quyết định chính xác khi nào và làm thế nào để giải quyết CAPTCHA.
- Thông báo lỗi chi tiết hơn – Điều này giúp các nhà phát triển thực hiện tối ưu hóa có mục tiêu.
Trước khi chúng ta đi sâu vào bản demo mã, đây là tổng quan nhanh về cách sử dụng API CapSolver:
- Bước 1: https://api.capsolver.com/createTask — Tạo một tác vụ
- Bước 2: https://api.capsolver.com/getTaskResult — Lấy kết quả tác vụ
Để tạo một tác vụ, bạn cần gửi một đối tượng JSON đến CapSolver. JSON này bao gồm clientKey, websiteURL, websiteKey và các dữ liệu khác của bạn. Các trường này thay đổi tùy thuộc vào loại CAPTCHA và trang web.
👉 Để biết chi tiết, hãy tham khảo tài liệu của chúng tôi: tài liệu
Giải quyết reCAPTCHA v2 bằng CapSolver API
Trước khi giải quyết reCAPTCHA v2, vui lòng đọc tài liệu tại đây:
📖 ReCaptchaV2
Hướng dẫn này giải thích các tham số JSON cần bao gồm khi tạo một tác vụ.
Ngoài ra, bạn có thể sử dụng Tiện ích mở rộng CapSolver để nhanh chóng tạo dữ liệu JSON cho các yêu cầu API của mình.
Xem blog này để được trợ giúp:
🔗 lấy dữ liệu JSON
Hãy lấy ví dụ sau:
🔗 https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php
JSON cần thiết để tạo một tác vụ cho trang này là:
json
{
"type": "ReCaptchaV2TaskProxyLess",
"websiteKey": "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9",
"websiteURL": "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php"
}
Chúng tôi cũng cung cấp các mẫu mã JavaScript để sử dụng API trong tài liệu của mình:

Tích hợp trong Playwright:
javascript
const { chromium } = require('playwright');
const axios = require('axios');
// Thay thế bằng khóa API của bạn
const api_key = 'YOUR_API_KEY';
const captcha_type = 'ReCaptchaV2TaskProxyLess';
const site_key = '6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9';
const site_url = 'https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php';
async function capSolver() {
const payload = {
clientKey: api_key,
task: {
type: captcha_type,
websiteKey: site_key,
websiteURL: site_url
}
};
try {
const res = await axios.post('https://api.capsolver.com/createTask', payload);
const task_id = res.data.taskId;
if (!task_id) {
console.log('Thất bại khi tạo tác vụ:', res.data);
return;
}
console.log('Đã lấy taskId:', task_id);
while (true) {
await new Promise(resolve => setTimeout(resolve, 1000)); // Chờ trong 1 giây
const getResultPayload = { clientKey: api_key, taskId: task_id };
const resp = await axios.post('https://api.capsolver.com/getTaskResult', getResultPayload);
const status = resp.data.status;
if (status === 'ready') {
return resp.data.solution.gRecaptchaResponse;
}
if (status === 'failed' || resp.data.errorId) {
console.log('Giải quyết thất bại! phản hồi:', resp.data);
return;
}
}
} catch (error) {
console.error('Lỗi:', error);
}
}
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: ['--lang=en-US'],
});
const [page] = context.pages();
await page.goto('https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php');
await page.waitForSelector('form[action="/recaptcha-v2-checkbox.php"]');
const token = await capSolver();
console.log("Token:", token);
// Đặt giá trị token
await page.evaluate((token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = token;
}
}, token);
await page.click('button[type="submit"]');
await page.waitForTimeout(5000);
await context.close();
})();
Giải quyết ImageToText bằng CapSolver API
Chúng ta vẫn sử dụng ví dụ về https://captcha.com/demos/features/captcha-demo.aspx, trong đó phần tử hình ảnh captcha có id demoCaptcha_CaptchaImage, và phần tử đầu vào kết quả có id captchaCode, như được hiển thị trong hình ảnh sau:

Đối với ImageToTextTask, chúng ta cần truyền giá trị base64 của hình ảnh captcha đến CapSolver. Mã ví dụ như sau:
javascript
const { chromium } = require('playwright');
const axios = require('axios');
// Thay thế bằng khóa API của bạn
const api_key = 'YOUR_API_KEY';
const captcha_type = 'ImageToTextTask';
const site_url = 'https://captcha.com/demos/features/captcha-demo.aspx';
async function capSolver(base64Image) {
const payload = {
clientKey: api_key,
task: {
type: captcha_type,
websiteURL: site_url,
body: base64Image,
}
};
try {
const res = await axios.post('https://api.capsolver.com/createTask', payload);
const status = res.data.status;
if (status === 'ready') {
return res.data.solution.text;
}
if (status === 'failed' || res.data.errorId) {
console.log('Giải quyết thất bại! phản hồi:', res.data);
return "";
}
} catch (error) {
console.error('Lỗi:', error);
}
}
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
viewport: { width: 1920, height: 1080 },
args: ['--lang=en-US'],
});
const [page] = context.pages();
await page.goto('https://captcha.com/demos/features/captcha-demo.aspx');
await page.waitForSelector('#demoCaptcha_CaptchaImage');
// Lấy giá trị base64 của hình ảnh captcha
const captchaImage = await page.evaluate(() => {
const img = document.querySelector('img[id="demoCaptcha_CaptchaImage"]');
return img ? img.getAttribute('src') : null;
});
const base64Image = captchaImage.split(',')[1];
const text = await capSolver(base64Image);
console.log("Text:", text);
// Đặt văn bản captcha đã được giải quyết
await page.evaluate((text) => {
document.getElementById('captchaCode').value = text;
}, text);
await page.click('#validateCaptchaButton');
await page.waitForTimeout(5000);
await context.close();
})();
Ngoài ra, đối với một số loại ImageToText đặc biệt, bạn có thể chỉ định các mô hình khác nhau để cải thiện độ chính xác. Để biết chi tiết, vui lòng tham khảo tài liệu của chúng tôi:
https://docs.capsolver.com/en/guide/recognition/ImageToTextTask/

Tài liệu tham khảo hữu ích
- Tài liệu CapSolver
- Bản phát hành GitHub của tiện ích mở rộng CapSolver
- Tiện ích mở rộng CapSolver trên Chrome Web Store
- Tiện ích mở rộng CapSolver trên Firefox Add-ons
- Trình giải điểm số giống người dùng cho reCAPTCHA v3
Video demo có tính năng Tiện ích mở rộng CapSolver:
- Giải quyết reCAPTCHA v3 bằng tiện ích mở rộng Chrome CapSolver
- Giải quyết reCAPTCHA v2 bằng tiện ích mở rộng Chrome CapSolver
- Giải quyết reCAPTCHA bằng Puppeteer & Tiện ích mở rộng CapSolver
- Giải quyết ImageToText bằng Puppeteer & Tiện ích mở rộng CapSolver
Ngoài ra, CapSolver cung cấp Chương trình chia sẻ doanh thu cho nhà phát triển, cho phép các nhà phát triển và đối tác kiếm hoa hồng bằng cách tích hợp hoặc quảng bá các giải pháp CapSolver. Đó là một cách tuyệt vời để kiếm tiền từ công việc của bạn đồng thời giúp người khác giải quyết các captcha một cách hiệu quả. Để biết đầy đủ chi tiết, hãy xem:
Kế hoạch dành cho nhà phát triển CapSolver
Kết luận
Các tính năng mạnh mẽ của Playwright, kết hợp với khả năng xử lý CAPTCHA của CapSolver, cung cấp một giải pháp toàn diện cho tự động hóa web. Cho dù sử dụng tiện ích mở rộng CapSolver để thuận tiện hay API để kiểm soát tốt hơn, việc tích hợp này sẽ hợp lý hóa các tác vụ phức tạp và nâng cao quy trình tự động hóa. Ngoài việc chỉ giải quyết CAPTCHA, hãy nhớ rằng CapSolver cũng cung cấp Chương trình chia sẻ doanh thu cho nhà phát triển, tạo cơ hội tuyệt vời để kiếm hoa hồng bằng cách tích hợp hoặc quảng bá các giải pháp của họ
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Lỗi Cloudflare 1006, 1007, 1008 - Giải pháp khắc phục | Cách sửa lỗi
Đang vật lộn với lỗi Cloudflare 1006, 1007 hoặc 1008? Tìm hiểu các giải pháp thực tế để giải quyết các lần từ chối truy cập này và nâng cao trải nghiệm quét web của bạn.

Rajinder Singh
05-Dec-2025

AI-LLM: Giải pháp tương lai cho Kiểm soát Rủi ro Nhận dạng Hình ảnh và Giải quyết CAPTCHA
Một khám phá sâu về cách các mô hình ngôn ngữ lớn (LLMs) đổi mới giải CAPTCHA đồ họa, kết hợp suy luận zero-shot với độ chính xác của mạng nơ-ron convolutional (CNN) cho kiểm soát rủi ro hiện đại.

Anh Tuan
05-Dec-2025

Cách giải Captchas khi quét web bằng Scrapling và CapSolver
Scrapling + CapSolver cho phép quét trang web tự động với việc vượt qua ReCaptcha v2/v3 và Cloudflare Turnstile.

Anh Tuan
05-Dec-2025

Thay đổi User-Agent trong Selenium | Các bước và Nguyên tắc tốt
Thay đổi User Agent trong Selenium là bước quan trọng trong nhiều nhiệm vụ quét web. Giúp che giấu script tự động hóa thành một trình duyệt thông thường...

Lucas Mitchell
05-Dec-2025

Làm thế nào để xác định xem `action` có cần thiết hay không để giải Cloudflare Turnstile bằng cách sử dụng tiện ích mở rộng CapSolver
Học cách nhận diện hành động để giải CAPTCHA hiệu quả cho Cloudflare Turnstile. Theo dõi hướng dẫn từng bước của chúng tôi về cách sử dụng các công cụ và kỹ thuật của Capsolver.

Aloísio Vítor
05-Dec-2025

Khám phá sức mạnh của 9Proxy: Bài đánh giá toàn diện
Trong bài viết này, chúng tôi sẽ giới thiệu 9proxy và các dịch vụ mà họ cung cấp.

Nikolai Smirnov
04-Dec-2025



