Airtable là một nền tảng cơ sở dữ liệu linh hoạt được sử dụng để quản lý dự án, thu thập dữ liệu và tự động hóa quy trình làm việc. Khi quy trình làm việc Airtable của bạn cần tương tác với các dịch vụ được bảo vệ CAPTCHA — gửi biểu mẫu, xử lý URL hoặc tự động nhập dữ liệu —CaptchaAIcó thể giải quyết CAPTCHA trực tiếp từ Airtable bằng cách sử dụng các tiện ích mở rộng Tự động hóa và Tập lệnh.
Hướng dẫn này chỉ ra cách thiết lập Tự động hóa Airtable kích hoạt giải CAPTCHA thông qua CaptchaAI khi bản ghi mới được tạo hoặc cập nhật.
Kịch bản thế giới thực
Bạn theo dõi các URL mục tiêu trong bảng Airtable. Mỗi URL có một CAPTCHA cần được giải quyết trước khi có thể trích xuất dữ liệu. Khi một URL mới được thêm vào:
- Tự động hóa Airtable phát hiện bản ghi mới
- Tập lệnh gửi tham số CAPTCHA tới CaptchaAI
- CaptchaAI trả lại mã thông báo đã giải quyết
- Mã thông báo được lưu lại vào bản ghi Airtable
Cấu trúc bảng
Tạo một bảng Airtable có tên Nhiệm vụ CAPTCHA với các trường sau:
| Tên trường | loại | Mục đích |
|---|---|---|
| URL | URL | URL trang mục tiêu |
| Khóa trang web | Văn bản một dòng | khóa trang web reCAPTCHA |
| Trạng thái | Chọn một lần | đang chờ giải quyết, giải quyết, giải quyết, thất bại |
| Mã thông báo | Văn bản dài | Đã giải quyết mã thông báo CAPTCHA |
| Giải quyết tại | Ngày/time | Dấu thời gian giải quyết |
| Lỗi | Văn bản một dòng | Thông báo lỗi nếu thất bại |
Bước 1: Tạo Tự động hóa
Trong Airtable:
- Đi tới tab Tự động hóa
- Nhấp vào Tạo tự động hóa
- Đặt tên cho nó là: "Giải CAPTCHA trên bản ghi mới"
Trình kích hoạt
Chọn Khi bản ghi khớp với điều kiện:
- Bảng: Nhiệm vụ CAPTCHA
- Tình trạng: Trạng thái "đang chờ xử lý"
Điều này kích hoạt bất cứ khi nào một bản ghi được đặt thành "đang chờ xử lý" - bao gồm cả bản ghi mới và các bản ghi được giải quyết lại.
Bước 2: Thêm hành động tập lệnh
Thêm một hành động -> Chạy tập lệnh:
// Airtable Automation Script — Solve CAPTCHA via CaptchaAI
// Input configuration (set in the left panel):
// - recordId: Record ID from trigger
// - sitekey: Sitekey field from trigger
// - pageurl: URL field from trigger
const config = input.config();
const recordId = config.recordId;
const sitekey = config.sitekey;
const pageurl = config.pageurl;
const API_KEY = 'YOUR_API_KEY'; // Use input.config() for security
// Update status to "solving"
const table = base.getTable('CAPTCHA Tasks');
await table.updateRecordAsync(recordId, {
'Status': { name: 'solving' },
});
try {
// Step 1: Submit task to CaptchaAI
const submitUrl = `https://ocr.captchaai.com/in.php?key=${API_KEY}&method=userrecaptcha&googlekey=${encodeURIComponent(sitekey)}&pageurl=${encodeURIComponent(pageurl)}&json=1`;
const submitResponse = await fetch(submitUrl);
const submitResult = await submitResponse.json();
if (submitResult.status !== 1) {
throw new Error(`Submit failed: ${submitResult.request}`);
}
const taskId = submitResult.request;
console.log(`Task submitted: ${taskId}`);
// Step 2: Poll for result (wait 15 seconds first)
await new Promise(resolve => setTimeout(resolve, 15000));
let token = null;
for (let i = 0; i < 20; i++) {
const pollUrl = `https://ocr.captchaai.com/res.php?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const pollResponse = await fetch(pollUrl);
const pollResult = await pollResponse.json();
if (pollResult.status === 1) {
token = pollResult.request;
break;
}
if (pollResult.request !== 'CAPCHA_NOT_READY') {
throw new Error(`Solve failed: ${pollResult.request}`);
}
await new Promise(resolve => setTimeout(resolve, 5000));
}
if (!token) {
throw new Error('Polling timeout — CAPTCHA not solved in time');
}
// Step 3: Update record with solved token
await table.updateRecordAsync(recordId, {
'Status': { name: 'solved' },
'Token': token,
'Solved At': new Date().toISOString(),
'Error': '',
});
console.log(`CAPTCHA solved for record ${recordId}`);
} catch (error) {
// Update record with error
await table.updateRecordAsync(recordId, {
'Status': { name: 'failed' },
'Error': error.message,
});
console.error(`Failed: ${error.message}`);
}
Định cấu hình đầu vào tập lệnh
Trong bảng điều khiển bên trái của hành động tập lệnh, hãy ánh xạ các biến đầu vào:
recordId-> ID bản ghi từ bước kích hoạtsitekey-> Trường khóa trang web từ bước kích hoạt- Trường URL
pageurl-> từ bước kích hoạt
Bước 3: Xử lý hàng loạt với phần mở rộng tập lệnh
Để xử lý nhiều bản ghi cùng một lúc, hãy sử dụng Tiện ích mở rộng tập lệnh của Airtable (có sẵn trong bảng Ứng dụng):
// Batch CAPTCHA Solver — Airtable Scripting Extension
const API_KEY = 'YOUR_API_KEY';
const table = base.getTable('CAPTCHA Tasks');
// Get all pending records
const query = await table.selectRecordsAsync({
fields: ['URL', 'Sitekey', 'Status'],
});
const pendingRecords = query.records.filter(
r => r.getCellValueAsString('Status') === 'pending'
);
output.text(`Found ${pendingRecords.length} pending CAPTCHAs`);
for (const record of pendingRecords) {
const sitekey = record.getCellValueAsString('Sitekey');
const pageurl = record.getCellValueAsString('URL');
if (!sitekey || !pageurl) {
output.text(`Skipping ${record.id} — missing sitekey or URL`);
continue;
}
output.text(`Solving for: ${pageurl}`);
await table.updateRecordAsync(record.id, {
'Status': { name: 'solving' },
});
try {
// Submit
const submitResp = await fetch(
`https://ocr.captchaai.com/in.php?key=${API_KEY}&method=userrecaptcha&googlekey=${encodeURIComponent(sitekey)}&pageurl=${encodeURIComponent(pageurl)}&json=1`
);
const submitData = await submitResp.json();
if (submitData.status !== 1) throw new Error(submitData.request);
// Poll
await new Promise(r => setTimeout(r, 15000));
let token = null;
for (let i = 0; i < 20; i++) {
const pollResp = await fetch(
`https://ocr.captchaai.com/res.php?key=${API_KEY}&action=get&id=${submitData.request}&json=1`
);
const pollData = await pollResp.json();
if (pollData.status === 1) { token = pollData.request; break; }
if (pollData.request !== 'CAPCHA_NOT_READY') throw new Error(pollData.request);
await new Promise(r => setTimeout(r, 5000));
}
if (!token) throw new Error('Timeout');
await table.updateRecordAsync(record.id, {
'Status': { name: 'solved' },
'Token': token,
'Solved At': new Date().toISOString(),
});
output.text(`✓ Solved: ${pageurl}`);
} catch (e) {
await table.updateRecordAsync(record.id, {
'Status': { name: 'failed' },
'Error': e.message,
});
output.text(`✗ Failed: ${e.message}`);
}
}
output.text('Batch processing complete');
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Tự động hóa không kích hoạt | Bản ghi không khớp với điều kiện "đang chờ xử lý" | Xác minh giá trị trường Trạng thái khớp chính xác |
fetch is not defined |
Airtable Scripting sử dụng remoteFetchAsync trong một số ngữ cảnh |
Hãy thử remoteFetchAsync thay vì fetch |
| Hết thời gian chờ tập lệnh | Các tập lệnh Airtable có giới hạn 30 giây cho tự động hóa | Sử dụng ít lần lặp bỏ phiếu hơn; tăng thời gian chờ ban đầu lên 20 giây |
| Cập nhật bản ghi không thành công | Tên trường không khớp | Đảm bảo tên trường trong bảng khớp updateRecordAsync chính xác |
| Khóa API hiển thị trong tập lệnh | Khóa API được mã hóa cứng | Sử dụng input.config() với biến đầu vào bí mật |
Câu hỏi thường gặp
Giới hạn thời gian thực thi tập lệnh trong Airtable là bao nhiêu?
Tập lệnh tự động hóa: 30 giây. Gia hạn tập lệnh: 30 giây (nhưng có thể được gia hạn với gói Pro). Để bỏ phiếu lâu, hãy tăng thời gian chờ ban đầu và giảm số lần lặp lại.
Tôi có thể sử dụng tính năng này cho CAPTCHA hình ảnh không?
Vâng. Thay đổi method thành base64 và gửi dữ liệu hình ảnh. Bạn có thể lưu trữ hình ảnh CAPTCHA được mã hóa base64 trong các trường Tệp đính kèm Airtable và trích xuất chúng trong tập lệnh.
Làm cách nào để xử lý khóa API một cách an toàn?
Trong Tự động hóa, hãy sử dụng biến đầu vào được định cấu hình trong bảng cài đặt tập lệnh. Trong tiện ích mở rộng Tập lệnh, bạn có thể nhắc nhập khóa khi chạy bằng input.textAsync().
Tôi có thể giải lại CAPTCHA bị lỗi không?
Vâng. Đặt Trạng thái trở lại "đang chờ xử lý" và quá trình tự động hóa sẽ kích hoạt lại. Thêm trường bộ đếm số lần thử lại để hạn chế số lần thử lại.
bài viết liên quan
- Cách giải quyết cuộc gọi lại Recaptcha V2 bằng Api
- Xử lý cửa quay Recaptcha V2 trên cùng một trang web
- Cơ chế gọi lại Recaptcha V2
Các bước tiếp theo
Tự động giải quyết CAPTCHA từ cơ sở dữ liệu Airtable của bạn –lấy khóa API CaptchaAI của bạnvà thiết lập tự động hóa.
Hướng dẫn liên quan:
- Tập lệnh Google Apps + CaptchaAI
- Zapier + CaptchaAI: Giải CAPTCHA không cần mã
- Tạo (Integromat) + CaptchaAI