
Anh Tuan
Data Science Expert

Cloudflare Turnstile đang trở thành lựa chọn CAPTCHA thay thế cho các trang web hiện đại. Khác với các CAPTCHA truyền thống buộc người dùng phải giải các câu đố hình ảnh, Turnstile chạy âm thầm ở nền — khiến nó khó bị phát hiện và vượt qua bằng các công cụ tự động thông thường.
Nhưng nếu bạn có thể xây dựng API giải Turnstile riêng của mình — một API nhận yêu cầu và trả về token hợp lệ, mà không cần viết một dòng mã truyền thống nào?
Trong hướng dẫn này, bạn sẽ học cách kết hợp n8n (công cụ tự động hóa quy trình trực quan) với CapSolver (dịch vụ giải CAPTCHA được AI hỗ trợ) để tạo một điểm cuối API mạnh mẽ giải các thách thức Cloudflare Turnstile theo yêu cầu.
Bạn sẽ xây dựng:
Cloudflare Turnstile là một giải pháp CAPTCHA thông minh được thiết kế để xác minh người dùng mà không gây khó chịu như các thách thức truyền thống. Thay vì yêu cầu người dùng nhấp vào hộp kiểm hoặc xác định các vật thể trong hình ảnh, Turnstile xác minh khách truy cập tự động bằng các tín hiệu trình duyệt và phân tích hành vi.
| Tính năng | Cloudflare Turnstile |
|---|---|
| Tương tác người dùng | Không có — chạy tự động ở nền |
| Cách hoạt động | Sử dụng các thách thức trình duyệt và tín hiệu hành vi để xác minh người truy cập |
| Tính hiển thị | Hiển thị một widget nhỏ, nhưng không có câu đố để giải |
| Chế độ widget | Quản lý, Không tương tác, Bị ẩn |
| Trường hợp sử dụng phổ biến | Trang đăng nhập, đăng ký, trang thanh toán, bất kỳ trang nào được bảo vệ bởi Cloudflare |
| Mã trang có hiển thị không? | Có |
Turnstile cung cấp ba chế độ widget mà các trang web có thể chọn:
| Chế độ | Mô tả |
|---|---|
| Quản lý | Cloudflare quyết định xem có hiển thị thách thức tương tác hay xác minh âm thầm |
| Không tương tác | Không bao giờ hiển thị thách thức — luôn xác minh ở nền |
| Bị ẩn | Hoàn toàn bị ẩn — không có widget nào được hiển thị trên trang |
Từ góc độ giải quyết, chế độ không thay đổi cách bạn cấu hình CapSolver — bạn luôn cần các tham số giống nhau: websiteURL và websiteKey.
Đừng nhầm lẫn Turnstile với Cloudflare Challenge toàn trang — cái mà hiển thị "Thực hiện kiểm tra bảo mật" với thanh loading trước khi cho phép bạn truy cập trang. Đó là một Cloudflare Challenge (còn được gọi là JS challenge hoặc managed challenge), không phải Turnstile.
| Cloudflare Turnstile | Cloudflare Challenge | |
|---|---|---|
| Nơi xuất hiện | Được nhúng bên trong trang (ví dụ: trong trang đăng nhập) | Trang đầy đủ trước khi bạn có thể truy cập trang |
| Giao diện | Một widget nhỏ trên trang | "Thực hiện kiểm tra bảo mật..." với thanh loading |
| Cách triển khai | Chủ trang web thêm nó vào biểu mẫu của họ | Cloudflare tự động thêm nó dựa trên quy tắc bảo mật |
| Phương pháp giải | Sử dụng thao tác Turnstile của CapSolver (hướng dẫn này) | Khác — yêu cầu trình giải Cloudflare Challenge |
Nếu bạn thấy màn hình "Thực hiện kiểm tra bảo mật" toàn trang, đó không phải là Turnstile — đó là Cloudflare Challenge và yêu cầu phương pháp khác. Xem những khác biệt chính
Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:
Lưu ý: Đảm bảo tài khoản CapSolver của bạn có đủ số dư. Các nhiệm vụ giải Turnstile sẽ tiêu hao tín dụng dựa trên việc sử dụng.
CapSolver có sẵn như một tích hợp chính thức trong n8n — không cần cài đặt nút cộng đồng. Bạn có thể tìm thấy nó trực tiếp trong bảng nút khi xây dựng quy trình làm việc của mình.
Vì đây là tích hợp chính thức, bạn cần tạo một chứng chỉ trong n8n để nút CapSolver có thể xác thực với tài khoản của bạn.
Đi đến phiên bản n8n của bạn và điều hướng đến Cài đặt → Chứng chỉ. Bạn sẽ thấy tất cả các chứng chỉ được cấu hình ở đây.

Tất cả (mặc định)n8n sẽ tự động kiểm tra kết nối. Bạn nên thấy thông báo "Kết nối thành công" màu xanh xác nhận khóa API của bạn hợp lệ.

Lưu ý: Tất cả các nút CapSolver trong quy trình làm việc của bạn sẽ tham chiếu đến chứng chỉ này. Bạn chỉ cần tạo nó một lần — tất cả các quy trình giải của bạn sẽ chia sẻ cùng một chứng chỉ.
Bây giờ bạn đã sẵn sàng để xây dựng quy trình giải Turnstile của mình!
Trước khi giải một thách thức Turnstile, bạn cần biết các tham số của nó — cụ thể là websiteURL và websiteKey (còn được gọi là khóa trang).
Turnstile chỉ cần hai tham số, vì vậy việc tìm chúng rất đơn giản:
Đây là URL đầy đủ của trang có widget Turnstile. Sao chép từ thanh địa chỉ trình duyệt của bạn.
Khóa trang được nhúng trong HTML của trang. Dưới đây là một số cách để tìm nó:
1. Tìm trong mã nguồn trang cho data-sitekey
Nhấp chuột phải trên trang → Xem mã nguồn trang (hoặc nhấn Ctrl+U) và tìm data-sitekey:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAADV8V8V8V8V8V8V"></div>
2. Tìm turnstile.render() trong JavaScript
Một số trang hiển thị Turnstile qua JavaScript thay vì thuộc tính HTML. Tìm trong mã nguồn trang cho turnstile.render:
turnstile.render('#widget', {
sitekey: '0x4AAAAAAADV8V8V8V8V8V8V',
});
3. Kiểm tra tab Mạng trong DevTools
Mở DevTools (F12) → tab Mạng → lọc bằng turnstile hoặc challenges.cloudflare.com. Khóa trang thường xuất hiện trong URL yêu cầu hoặc dữ liệu phản hồi.
4. Tìm challenges.cloudflare.com trong HTML
Turnstile tải script của nó từ Cloudflare. Tìm trong mã nguồn trang cho tên miền này — khóa trang thường ở gần đó:
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Lưu ý:
- Khóa trang luôn bắt đầu bằng
0xvà là chuỗi ký tự dài- Nếu trang sử dụng Cloudflare's managed challenge (thách thức toàn trang trước khi truy cập trang), widget Turnstile có thể không có trong mã nguồn trang — nó được cung cấp bởi trang challenge của Cloudflare thay vào đó
Quy trình này tạo ra một điểm cuối API POST nhận tham số Turnstile và trả về token đã giải.

Quy trình gồm ba nút:
| Thiết lập | Giá trị |
|---|---|
| Phương thức HTTP | POST |
| Đường dẫn | solver-turnstile |
| Chế độ Trả lời | Node Trả lời |
Điều này tạo ra một điểm cuối tại: https://your-n8n-instance.com/webhook/solver-turnstile
| Tham số | Giá trị | Mô tả |
|---|---|---|
| Hoạt động | Cloudflare Turnstile |
Phải được đặt thành Cloudflare Turnstile |
| Loại | AntiTurnstileTaskProxyLess |
Loại nhiệm vụ này không yêu cầu proxy |
| URL Trang Web | {{ $json.body.websiteURL }} |
URL của trang có widget Turnstile |
| Khóa Trang | {{ $json.body.websiteKey }} |
Khóa trang Turnstile |
| metadata.action | (Tùy chọn) | Một số trang yêu cầu chuỗi hành động cụ thể cho thách thức Turnstile |
| metadata.cdata | (Tùy chọn) | Dữ liệu tùy chỉnh mà một số trang truyền đến widget Turnstile để xác minh |
Một số trang cũng yêu cầu metadata.action và/hoặc metadata.cdata — bạn có thể thêm chúng trong phần Tùy chọn của nút. Chọn cả chứng chỉ CapSolver của bạn trong nút này.
| Thiết lập | Giá trị |
|---|---|
| Trả lời Bằng | JSON |
| Nội dung Trả lời | {{ JSON.stringify($json.data) }} |
Điều này trả về phản hồi đầy đủ của CapSolver, bao gồm token Turnstile đã giải.
Gửi yêu cầu POST đến điểm cuối webhook của bạn:
curl -X POST https://your-n8n-instance.com/webhook/solver-turnstile \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/login",
"websiteKey": "0x4AAAAAAADV8V8V8V8V8V8V"
}'
Phản hồi Dự kiến:
{
"taskId": "abc123...",
"solution": {
"token": "0.XXXXXXXXXXXXXXXX..."
},
"status": "ready"
}
Sao chép JSON dưới đây và nhập vào n8n qua Menu → Nhập từ JSON:
{
"name": "Turnstile solver",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "solver-turnstile",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [-208, 0],
"id": "137be4f0-1762-4f0c-b993-c512d27e35de",
"name": "Webhook",
"webhookId": "3d32ad61-d925-4a09-8fe5-7226e6664a98"
},
{
"parameters": {
"operation": "Cloudflare Turnstile",
"websiteURL": "={{ $json.body.websiteURL }}",
"websiteKey": "={{ $json.body.websiteKey }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [192, 80],
"id": "954ff1f0-d5de-4468-b0d1-fbce03676676",
"name": "Cloudflare Turnstile",
"credentials": {
"capSolverApi": {
"id": "sLg2YDZd7WtYJJJ4",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [400, 0],
"id": "db264e2b-48ce-4887-9b2b-2b8077993c30",
"name": "Respond to Webhook"
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Cloudflare Turnstile",
"type": "main",
"index": 0
}
]
]
},
"Cloudflare Turnstile": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1"
}
}
Điểm cuối API giải Turnstile chấp nhận các tham số sau:
| Tham số | Bắt buộc | Mô tả |
|---|---|---|
websiteURL |
Có | URL của trang chứa widget Turnstile |
websiteKey |
Có | Khóa trang Turnstile |
metadata.action |
Không | Chuỗi hành động được yêu cầu bởi một số trang cho thách thức Turnstile |
metadata.cdata |
Không | Dữ liệu tùy chỉnh được truyền đến widget Turnstile bởi một số trang |
Lưu ý: Bạn có thể xác định
websiteURLvàwebsiteKeybằng cách kiểm tra mã nguồn trang — xem Cách Xác định Tham số Turnstile.
So với reCAPTCHA, Turnstile đơn giản hơn — bạn chỉ cần hai tham số bắt buộc. Một số trang có thể yêu cầu các trường tùy chọn metadata.action hoặc metadata.cdata — thêm chúng vào phần Tùy chọn của nút nếu token không được chấp nhận.
Quy trình API trên cho thấy cách nhận token Turnstile đã giải. Nhưng bạn thực sự làm gì với nó?
Trong tự động hóa thực tế, giải quyết thách thức chỉ là một nửa công việc. Bạn cần gửi token đến trang đích — giống như trình duyệt sẽ làm — để mở khóa dữ liệu hoặc hành động đằng sau bảo vệ Turnstile.
Đây là mô hình chung:
cf-turnstile-response)Ví dụ: https://example.com/ — Một trang web được bảo vệ bởi Turnstile
Kích hoạt Thủ công → CapSolver Turnstile → Yêu cầu HTTP POST → IF (kiểm tra thành công) → Chỉnh sửa Trường (trích xuất dữ liệu)
Cloudflare Turnstilehttps://example.com/login0x4AAAAAAA... (tìm bằng cách kiểm tra mã nguồn trang — xem Cách Xác định Tham số Turnstilecf-turnstile-response của biểu mẫuusername, password)Khái niệm quan trọng: Mỗi trang web xử lý việc gửi token khác nhau. Trong ví dụ này, token được gửi qua trường
cf-turnstile-responsebằng phương thức POST — nhưng các trang web khác có thể yêu cầu nó ở tên trường khác, dưới dạng dữ liệu JSON, trong tiêu đề, hoặc thông qua một điểm cuối hoàn toàn khác. Luôn kiểm tra việc gửi biểu mẫu thực tế của trang web (bằng tab Mạng trong DevTools) để xem chính xác cách token cần được gửi.
websiteURL và websiteKey bằng cách kiểm tra mã nguồn trang webcf-turnstile-response, nhưng hãy kiểm tra biểu mẫu thực tế)Lưu ý: Ví dụ này sử dụng Trigger thủ công để đơn giản, nhưng bạn có thể thay thế bằng bất kỳ nút Trigger nào — Webhook (để xây dựng API), Lịch (để chạy mỗi giờ), Sự kiện ứng dụng (để phản ứng với tin nhắn Telegram), hoặc bất kỳ nút nào khác. Xem Cách kích hoạt quy trình làm việc của bạn để xem tất cả các tùy chọn.
Các ví dụ trong hướng dẫn này sử dụng Trigger thủ công (đối với quy trình quét) và Webhook (đối với quy trình API), nhưng n8n cung cấp nhiều cách khác để bắt đầu một quy trình làm việc. Bạn có thể thay thế nút Trigger để phù hợp với nhu cầu của mình:
| Trigger | Mô tả | Phù hợp nhất với |
|---|---|---|
| Kích hoạt thủ công | Nhấn "Thực thi quy trình làm việc" trong n8n | Kiểm tra và chạy một lần |
| Theo lịch | Chạy mỗi ngày, mỗi giờ hoặc khoảng thời gian tùy chỉnh (cron) | Các công việc quét định kỳ (ví dụ: kiểm tra một trang web mỗi giờ) |
| Khi có yêu cầu Webhook | Chạy khi nhận được yêu cầu HTTP | Xây dựng API mà các dịch vụ khác có thể gọi |
| Khi có sự kiện ứng dụng | Chạy khi có điều gì đó xảy ra trong Telegram, Notion, Airtable, v.v. | Phản ứng với các sự kiện (ví dụ: tin nhắn Telegram mới kích hoạt giải quyết) |
| Khi gửi biểu mẫu | Tạo biểu mẫu web trong n8n và truyền phản hồi đến quy trình làm việc | Cho phép người dùng gửi tham số Captcha qua biểu mẫu |
| Khi được thực thi bởi quy trình làm việc khác | Được gọi bởi nút Execute Workflow từ quy trình làm việc khác | Kiến trúc mô-đun — giữ giải pháp của bạn như một quy trình con có thể tái sử dụng |
| Khi có tin nhắn trò chuyện | Chạy khi người dùng gửi tin nhắn trò chuyện (nút AI) | Tích hợp chatbot cần giải quyết thách thức theo yêu cầu |
| Các cách khác | Lỗi quy trình làm việc, thay đổi tệp, v.v. | Kích hoạt tự động nâng cao |
Ví dụ, để chạy quy trình quét của bạn mỗi giờ, chỉ cần thay thế Trigger thủ công bằng nút Trigger theo lịch và đặt khoảng thời gian là 1 giờ. Phần còn lại của quy trình làm việc vẫn giữ nguyên.
Sau khi quy trình làm việc giải quyết thử thách Turnstile và truy xuất dữ liệu từ trang web đích, bạn sẽ muốn lưu trữ hoặc xuất dữ liệu đó. n8n cung cấp các nút chuyển đổi dữ liệu và đầu ra tích hợp cho mục đích này.
Trước khi lưu, bạn có thể chuyển đổi dữ liệu đã quét bằng các nút tích hợp của n8n:
| Nút | Mô tả |
|---|---|
| Ghép | Kết hợp dữ liệu từ nhiều nguồn |
| Tóm tắt | Tổng hợp, đếm, giá trị lớn nhất, v.v. trên các mục |
| Chuyển đổi thành tệp | Chuyển đổi dữ liệu JSON thành định dạng nhị phân như CSV, Excel |
| Trích xuất từ tệp | Chuyển đổi dữ liệu nhị phân thành JSON |
| HTML | Phân tích và trích xuất dữ liệu từ phản hồi HTML |
| XML | Chuyển đổi giữa JSON và XML |
| Đổi tên trường | Đổi tên trường để phù hợp với định dạng đầu ra mong muốn |
| Sắp xếp | Sắp xếp các mục trước khi xuất |
Sau khi nút IF xác minh phản hồi, bạn có thể thêm bất kỳ nút nào trong số các nút sau để lưu dữ liệu:
| Điểm đầu ra | Cách thực hiện |
|---|---|
| Google Sheets | Thêm hàng vào bảng tính — lý tưởng để theo dõi kết quả theo thời gian |
| Tệp Excel / CSV | Sử dụng nút Chuyển đổi thành tệp để tạo tệp .xlsx hoặc .csv, sau đó lưu bằng nút Ghi tệp nhị phân hoặc tải lên Google Drive |
| Cơ sở dữ liệu (MySQL, PostgreSQL, MongoDB) | Chèn trực tiếp vào bảng cơ sở dữ liệu để lưu trữ có cấu trúc |
| Airtable / Notion | Gửi dữ liệu đến các công cụ quản lý dự án của bạn |
| Google Drive / S3 | Tải lên tệp đến lưu trữ đám mây |
| Telegram / Slack / Email | Gửi thông báo với dữ liệu đã quét |
| Tệp JSON cục bộ | Ghi kết quả vào tệp .json trên đĩa |
Lời khuyên: Bạn có thể kết hợp nhiều đầu ra — ví dụ, lưu vào Google Sheets và gửi thông báo Telegram cùng lúc bằng cách kết nối cả hai nút với đầu ra "đúng" của nút IF.
| Triệu chứng | Nút CapSolver thất bại với lỗi API key |
| Nguyên nhân | API key của bạn sai hoặc chưa được cấu hình |
| Giải pháp | Kiểm tra lại API key của bạn trong Cài đặt → Chứng chỉ. Sao chép nó trực tiếp từ Bảng điều khiển CapSolver |
| Triệu chứng | Tạo nhiệm vụ thất bại với lỗi số dư |
| Nguyên nhân | Tài khoản CapSolver của bạn không còn tín dụng |
| Giải pháp | Nạp tiền vào tài khoản tại Bảng điều khiển CapSolver |
| Triệu chứng | Token trả về bị trang web đích từ chối |
| Nguyên nhân | Token Turnstile hết hạn sau một khoảng thời gian ngắn |
| Giải pháp | Sử dụng token ngay lập tức sau khi nhận được |
| Triệu chứng | CapSolver trả về token thành công, nhưng trang web đích vẫn từ chối nó |
| Nguyên nhân | Một số trang web có các bảo vệ bổ sung ngoài Turnstile, hoặc yêu cầu các tham số cụ thể không được bao gồm |
| Giải pháp | Kiểm tra lại xem bạn có gửi token chính xác như trang web mong đợi (tên trường đúng, phương thức và điểm cuối). Đảm bảo bạn đang sử dụng khóa trang đúng. Nếu token vẫn không được chấp nhận, liên hệ đội ngũ hỗ trợ CapSolver để được hỗ trợ — họ có thể giúp chẩn đoán các vấn đề liên quan đến trang web cụ thể |
| Triệu chứng | Webhook mất quá nhiều thời gian hoặc hết thời gian |
| Nguyên nhân | Giải quyết Captcha có thể mất vài giây tùy thuộc vào tải |
| Giải pháp | Tăng thời gian chờ webhooks trong cài đặt n8n. Xem xét thêm logic thử lại cho các trường hợp sản xuất |
Sử dụng token ngay lập tức — Token Turnstile hết hạn nhanh. Gửi token đến trang web đích ngay khi bạn nhận được từ API giải quyết của mình.
Xác minh tham số trước khi cấu hình — Luôn xác nhận khóa websiteKey đúng bằng cách kiểm tra mã nguồn trang web trước khi cấu hình quy trình làm việc của bạn.
Giữ API key an toàn — Không bao giờ tiết lộ API key CapSolver trong mã phía khách. Các quy trình làm việc n8n giữ khóa của bạn ở phía máy chủ, đây là cách được khuyến khích.
Theo dõi số dư của bạn — Thiết lập thông báo số dư trong bảng điều khiển CapSolver để tránh các lần thất bại quy trình làm việc do thiếu tín dụng.
Thêm xử lý lỗi — Đối với các quy trình làm việc sản xuất, thêm nút IF sau nút CapSolver để kiểm tra lỗi và xử lý chúng một cách trơn tru (ví dụ: thử lại, thông báo hoặc ghi lại lỗi).
Bạn đã học cách xây dựng một API giải quyết Turnstile của Cloudflare và mẫu quy trình quét bằng n8n và CapSolver — không cần lập trình truyền thống.
Trong hướng dẫn này, chúng tôi đã đề cập đến:
Thông điệp chính là: giải quyết thử thách Turnstile chỉ là một nửa công việc — bạn cũng cần gửi token đến trang web đích để mở khóa dữ liệu được bảo vệ.
Sẵn sàng bắt đầu chưa? Đăng ký CapSolver và sử dụng mã thưởng n8n để nhận thêm 8% thưởng cho lần nạp đầu tiên!

Cloudflare Turnstile là một sự thay thế cho CAPTCHA, xác minh người dùng mà không yêu cầu họ giải các câu đố. Nó chạy ở nền bằng các tín hiệu trình duyệt và phân tích hành vi để xác định xem người dùng có phải là người thật hay không.
Nút CapSolver của n8n hỗ trợ Cloudflare Turnstile, reCAPTCHA v2, reCAPTCHA v2 ẩn, reCAPTCHA v3 và nhiều hơn nữa. Xem trang tích hợp CapSolver của n8n để xem danh sách đầy đủ.
Giá cả thay đổi tùy theo nhu cầu sử dụng. Xem trang giá của CapSolver để xem mức giá hiện tại cho Turnstile.
Thử thách Turnstile thường được giải quyết trong vài giây vì không có các thử thách hình ảnh liên quan.
Có! Quy trình này hoạt động với cả n8n tự host và n8n Cloud. Nút CapSolver đã có sẵn như một tích hợp chính thức — chỉ cần thêm chứng chỉ API của bạn.
Tìm kiếm mã nguồn trang web cho data-sitekey trong HTML hoặc xem turnstile.render() trong JavaScript. Bạn cũng có thể mở DevTools (F12) → tab Mạng và lọc bằng turnstile để tìm khóa trang trong các yêu cầu. Xem Cách xác định tham số Turnstile để hướng dẫn chi tiết.
Turnstile là sự thay thế CAPTCHA của Cloudflare tập trung vào quyền riêng tư và trải nghiệm người dùng — hiếm khi hiển thị các thử thách hiển thị. reCAPTCHA là hệ thống phát hiện bot của Google có thể yêu cầu người dùng giải các câu đố hình ảnh (v2) hoặc gán điểm hành vi (v3). Cả hai đều có thể được giải bằng CapSolver trong n8n.
Nút CapSolver sẽ trả về lỗi. Đối với các quy trình làm việc sản xuất, được khuyến khích thêm xử lý lỗi (ví dụ: nút IF để kiểm tra lỗi và cơ chế thử lại hoặc thông báo).
Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.
