Integrations

Airtable + CaptchaAI:数据库触发的验证码解决

Airtable 是一个灵活的数据库平台,用于项目管理、数据收集和工作流程自动化。当您的 Airtable 工作流程需要与受验证码保护的服务交互时(提交表单、处理 URL 或自动输入数据)CaptchaAI可以使用其自动化和脚本扩展直接从 Airtable 解决验证码。

本指南介绍如何设置 Airtable Automation,以便在创建或更新新记录时通过 CaptchaAI 触发验证码解决。

真实场景

您可以在 Airtable 表中跟踪目标 URL。每个 URL 都有一个验证码,需要先解决该验证码才能提取数据。添加新 URL 时:

  1. Airtable Automation 检测到新记录
  2. 脚本将验证码参数提交给 CaptchaAI
  3. CaptchaAI 返回已解决的令牌
  4. 令牌被保存回 Airtable 记录

表结构

使用以下字段创建一个名为 CAPTCHA Tasks 的 Airtable 表:

字段名称 类型 目的
网址 网址 目标页面网址
站点密钥 单行文本 reCAPTCHA 站点密钥
地位 单选 待决、正在解决、已解决、失败
代币 长文本 已解决验证码令牌
解决于 日期/time 解决的时间戳
错误 单行文本 如果失败则出现错误消息

第 1 步:创建自动化

在空中表中:

  1. 转到 自动化 选项卡
  2. 单击创建自动化
  3. 将其命名为:“在新记录上解决验证码”

扳机

选择当记录符合条件

  • 表:CAPTCHA 任务
  • 条件:状态为“待处理”

每当记录设置为“待处理”时就会触发 - 涵盖新记录和重新解决。

第 2 步:添加脚本操作

添加操作 → 运行脚本

// 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}`);
}

配置脚本输入

在脚本操作的左侧面板中,映射输入变量:

  • recordId → 记录触发步骤的 ID
  • sitekey → 触发步骤中的 Sitekey 字段
  • pageurl → 触发步骤中的 URL 字段

第 3 步:使用脚本扩展进行批处理

要一次处理多个记录,请使用 Airtable 的 脚本扩展(在“应用程序”面板中提供):

// 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');

故障排除

问题 原因 处理方式
自动化不触发 记录与“待处理”条件不匹配 验证状态字段值完全匹配
fetch is not defined Airtable 脚本在某些情况下使用 remoteFetchAsync 尝试 remoteFetchAsync 而不是 fetch
脚本超时 Airtable 脚本的自动化时间限制为 30 秒 使用更少的轮询迭代;将初始等待时间增加到 20 秒
记录更新失败 字段名称不匹配 确保 updateRecordAsync 中的字段名称与表完全匹配
脚本中公开的 API 密钥 硬编码 API 密钥 input.config() 与秘密输入变量一起使用

常问问题

Airtable 中的脚本执行时间限制是多少?

自动化脚本:30 秒。脚本扩展:30 秒(但可以通过 Pro 计划进行扩展)。对于长轮询,增加初始等待并减少迭代。

我也可以将其用于图像验证码吗?

是的。将method更改为base64并提交图像数据。您可以将 Base64 编码的验证码图像存储在 Airtable 附件字段中,并将其提取到脚本中。

如何安全地处理 API 密钥?

在自动化中,使用在脚本设置面板中配置的输入变量。在脚本扩展中,您可以在运行时使用 input.textAsync() 提示输入密钥。

我可以重新解决失败的验证码吗?

是的。将状态设置回“待处理”,自动化将重新触发。添加重试计数器字段以限制重试。

相关文章

  • 如何使用Api解决Recaptcha V2回调
  • Recaptcha V2 Turnstile同一站点处理
  • Recaptcha V2回调机制

下一步

从 Airtable 数据库自动解决验证码问题 -获取您的 CaptchaAI API 密钥并设置自动化。

相关指南:

该文章已禁用评论。

相关文章

Integrations Apify + CaptchaAI:云抓取平台集成
Apify + Captcha AI 集成指南:云抽取平台集成,包含设置、代码示例以及连接 Captcha AI 的清晰路径。

Apify + Captcha AI 集成指南:云抽取平台集成,包含设置、代码示例以及连接 Captcha AI 的清晰路径。

Apr 19, 2026
Use Cases 使用验证码处理自动提交表单
使用验证码处理自动提交表单的实用指南,包含现实场景、工作流程建议以及使用 Captcha AI 的可行步骤。

使用验证码处理自动提交表单的实用指南,包含现实场景、工作流程建议以及使用 Captcha AI 的可行步骤。

Apr 20, 2026
Use Cases 持续集成测试中的验证码处理
持续集成测试中的验证码处理实用指南,包含现实场景、工作流程建议和使用 Captcha AI 的可操作步骤。

持续集成测试中的验证码处理实用指南,包含现实场景、工作流程建议和使用 Captcha AI 的可操作步骤。

May 03, 2026