
Anh Tuan
Data Science Expert

Các script tự động hóa bằng Node.js của bạn có bị chặn bởi Cloudflare không? Bạn không phải là người duy nhất. Các biện pháp bảo mật mạnh mẽ của Cloudflare, như các bài kiểm tra JavaScript và chế độ "I'm Under Attack", hiệu quả trong việc ngăn bot nhưng cũng có thể làm gián đoạn các nhiệm vụ trích xuất dữ liệu và quét web hợp pháp. Các kiểm tra bảo mật này xác minh người truy cập bằng cách chạy các bài kiểm tra nền mà các script tự động thường không thể vượt qua.
Hướng dẫn này sẽ cho bạn biết cách vượt qua rào cản này. Chúng tôi sẽ đi qua quy trình rõ ràng, từng bước sử dụng Node.js và dịch vụ CapSolver để giải các bài kiểm tra Cloudflare và nhận được token cf_clearance để truy cập trơn tru.
Trước khi bắt đầu, hãy đảm bảo bạn có những thứ sau:
Trước tiên, chúng ta cần cài đặt thư viện axios để thực hiện các yêu cầu HTTP. Mở terminal và thực hiện lệnh sau:
npm install axios
Dưới đây là mã mẫu để giải bài kiểm tra Cloudflare và nhận token cf_clearance bằng Node.js và API CapSolver. Mã này minh họa cách tạo AntiCloudflareTask và kiểm tra kết quả.
Mã này bao gồm các thực hành mới nhất từ tài liệu chính thức của CapSolver, với cấu trúc rõ ràng và các chú thích cần thiết.
const axios = require('axios');
// -------------------VUI LÒNG THAY ĐỔI CÁC GIÁ TRỊ SAU-------------------
// Chi tiết proxy theo định dạng: http://username:password@ip:port
const PROXY = 'http://username:password@ip:port';
// Mã API của bạn từ Bảng điều khiển CapSolver
const CAPSOLVER_API_KEY = 'YourAPIKEY';
// URL của trang web mục tiêu nơi bạn muốn giải bài kiểm tra Cloudflare
const PAGE_URL = 'https://www.yourwebsite.com';
// ----------------------------------------------------------------
/**
* Tạo một nhiệm vụ để giải bài kiểm tra Cloudflare bằng API CapSolver.
* @param {string} websiteURL - URL của trang web mục tiêu.
* @param {string} proxy - Proxy để sử dụng.
* @returns {Promise<string|null>} - ID nhiệm vụ, hoặc null nếu tạo thất bại.
*/
async function createCloudflareTask(websiteURL, proxy) {
console.log('Tạo nhiệm vụ Cloudflare cho CapSolver...');
try {
const response = await axios.post('https://api.capsolver.com/createTask', {
clientKey: CAPSOLVER_API_KEY,
task: {
type: 'AntiCloudflareTask',
websiteURL: websiteURL,
proxy: proxy
}
});
if (response.data.errorId > 0) {
console.error(`Tạo nhiệm vụ thất bại: ${response.data.errorDescription}`);
return null;
}
console.log(`Tạo nhiệm vụ thành công. ID nhiệm vụ: ${response.data.taskId}`);
return response.data.taskId;
} catch (error) {
console.error(`Lỗi xảy ra khi tạo nhiệm vụ: ${error}`);
return null;
}
}
/**
* Kiểm tra kết quả nhiệm vụ.
* @param {string} taskId - ID nhiệm vụ trả về bởi CapSolver.
* @returns {Promise<object|null>} - Đối tượng giải pháp, hoặc null nếu thất bại.
*/
async function getTaskResult(taskId) {
console.log(`Nhận kết quả cho ID nhiệm vụ ${taskId}...`);
let solution = null;
while (!solution) {
await new Promise(resolve => setTimeout(resolve, 3000)); // Chờ 3 giây
try {
const response = await axios.post('https://api.capsolver.com/getTaskResult', {
clientKey: CAPSOLVER_API_KEY,
taskId: taskId
});
if (response.data.errorId > 0) {
console.error(`Lấy kết quả thất bại: ${response.data.errorDescription}`);
return null;
}
if (response.data.status === 'ready') {
console.log('Giải pháp đã nhận được thành công!');
solution = response.data.solution;
} else if (response.data.status === 'processing') {
console.log('Nhiệm vụ vẫn đang xử lý, vui lòng đợi...');
} else if (response.data.status === 'failed') {
console.error(`Nhiệm vụ xử lý thất bại: ${response.data.errorDescription}`);
return null;
}
} catch (error) {
console.error(`Lỗi xảy ra khi lấy kết quả: ${error}`);
return null;
}
}
return solution;
}
/**
* Hàm chính để thực hiện toàn bộ quy trình.
*/
async function main() {
console.log('Bắt đầu giải bài kiểm tra Cloudflare...');
const taskId = await createCloudflareTask(PAGE_URL, PROXY);
if (!taskId) {
console.log('Không thể tạo nhiệm vụ, thoát.');
return;
}
const solution = await getTaskResult(taskId);
if (!solution) {
console.log('Không thể nhận giải pháp, thoát.');
return;
}
console.log('Chi tiết giải pháp đã nhận được:');
console.log(solution);
// Bạn có thể sử dụng các cookie và user-agent đã nhận được để truy cập trang web mục tiêu.
// Đối tượng giải pháp chứa 'url', 'status', 'headers', 'cookies', 'userAgent'.
// Ví dụ: Cách sử dụng cookie và user-agent đã nhận được để thực hiện yêu cầu
try {
const cfCookie = solution.cookies.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');
console.log('\nTruy cập trang mục tiêu bằng cookie và user-agent đã nhận được...');
const pageResponse = await axios.get(PAGE_URL, {
headers: {
'User-Agent': solution.userAgent,
'Cookie': cfCookie
},
// Nên sử dụng một phiên bản axios có proxy riêng cho các yêu cầu tiếp theo.
proxy: false,
});
console.log(`\nTruy cập thành công! Mã trạng thái trang: ${pageResponse.status}`);
// console.log('Nội dung trang:', pageResponse.data); // Gỡ bỏ ghi chú để xem nội dung trang
} catch (error) {
console.error(`\nLỗi truy cập trang bằng giải pháp: ${error.response ? error.response.status : error.message}`);
}
}
main();
Trước khi chạy mã, hãy chắc chắn thay đổi các biến sau:
PROXY: Thay thế bằng địa chỉ máy chủ proxy và thông tin xác thực của bạn. Định dạng nên là http://username:password@ip:port.CAPSOLVER_API_KEY: Tìm mã API của bạn trên Bảng điều khiển CapSolver và thay thế mẫu.Bằng cách tích hợp CapSolver, các nhà phát triển có thể tự động hóa quy trình phức tạp trong việc xử lý các bài kiểm tra Cloudflare trong ứng dụng Node.js của họ. Cách tiếp cận này không chỉ có tỷ lệ thành công cao mà còn giúp bạn tránh phải đối phó với các chính sách bảo mật liên tục thay đổi. Bạn chỉ cần gọi một API và nhận được token cf_clearance và User-Agent tương ứng, cho phép truy cập liền mạch vào trang web mục tiêu của bạn. Chiến lược này là thiết yếu cho mọi dự án yêu cầu thu thập dữ liệu quy mô lớn và ổn định.
Câu hỏi 1: Tại sao tôi cần sử dụng proxy?
Trả lời 1: Cloudflare giám sát các địa chỉ IP để phát hiện hoạt động bất thường. Một địa chỉ IP thực hiện nhiều yêu cầu có thể bị ghi nhận là bot. Sử dụng proxy chất lượng cao với khả năng xoay (như proxy nhà ở hoặc ISP) mô phỏng hành vi người dùng thực tế và tăng đáng kể tỷ lệ thành công của bạn.
Câu hỏi 2: Token cf_clearance có hiệu lực bao lâu?
Trả lời 2: Token cf_clearance thường có hiệu lực trong vài giờ, mặc dù thời gian cụ thể phụ thuộc vào cài đặt của website trên Cloudflare. Khi hết hạn, bạn cần chạy quy trình lại để nhận token mới.
Câu hỏi 3: Tôi có thể sử dụng cookie đã nhận trong scraper của mình không?
Trả lời 3: Có. Sau khi nhận giải pháp từ CapSolver, bạn phải bao gồm cookie cf_clearance và User-Agent tương ứng trong tất cả các yêu cầu HTTP tiếp theo. Việc sử dụng cùng địa chỉ IP proxy như khi tạo token là rất quan trọng. Mặc dù hướng dẫn này tập trung vào Node.js, các nguyên tắc tương tự áp dụng cho các ngôn ngữ khác. Ví dụ, bạn có thể học cách giải bài kiểm tra Cloudflare bằng Python và Selenium trong bài viết khác của chúng tôi.
Câu hỏi 4: CapSolver có thể xử lý các loại CAPTCHA nào khác?
Trả lời 4: CapSolver hỗ trợ nhiều loại bài kiểm tra ngoài Cloudflare, bao gồm các phiên bản khác nhau của reCAPTCHA và CAPTCHA dựa trên hình ảnh. Để cập nhật các giải pháp hiệu quả nhất, bạn có thể kiểm tra bảng xếp hạng hiệu suất của những người giải bài kiểm tra Cloudflare hàng đầu. Để xem danh sách đầy đủ các loại được hỗ trợ, tốt nhất là tham khảo tài liệu chính thức của CapSolver.
Học cách khắc phục lỗi Cloudflare Error 1005 bị từ chối truy cập khi quét dữ liệu. Khám phá các giải pháp như proxy nhà ở, dấu vân tay trình duyệt và CapSolver cho CAPTCHA. Tối ưu hóa việc trích xuất dữ liệu.

Khám phá cách xử lý hiệu quả Cloudflare Turnstile trong các quy trình AI bằng các kỹ thuật che giấu của Playwright và CapSolver để giải captcha đáng tin cậy. Học các chiến lược tích hợp thực tế và các phương pháp tốt nhất để tự động hóa không gián đoạn.
