集成指南

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 密钥并设置自动化。

相关指南:

该文章已禁用评论。