← All notes

RESEARCH & FIELD NOTES/

When RPA Meets CAPTCHA: From an AI Vision Idea to an Auditable Human-in-the-Loop Workflow

This design note examines an unimplemented RPA idea: using AI to interpret text and a checkerboard aligned with pointer-motion units to express click or drag coordinates. It then explains why third-party production CAPTCHAs should not be treated as ordinary UI automation, and reframes the idea as a safe workflow built around official APIs, test credentials, human review, coordinate calibration, confidence gates, and audit logs.

A design note, not a CAPTCHA-bypass tutorial

Abstract

A brittle point in many robotic process automation workflows appears when a data-collection job reaches a CAPTCHA. A conventional RPA script expects stable fields, buttons, and coordinates. A CAPTCHA is deliberately designed to interrupt that assumption: it asks the system to distinguish a human interaction from automated behavior.

This note starts from an unimplemented idea. For a text-oriented interface, a vision-language model might interpret the visible text. For a click or drag interface, the screenshot might be covered with a checkerboard whose spacing matches the RPA pointer-motion unit; the model would identify a target cell, and the controller would translate that cell into pointer movement. The idea is intuitively attractive because it converts a continuous screen into a small discrete action space.

But that decomposition hides an important boundary. On a third-party production site, autonomously solving and submitting a CAPTCHA is not merely UI automation—it bypasses a control that the site operator intentionally inserted to stop automation. The engineering goal should therefore be reframed: use official APIs where possible, use vendor-provided test modes in systems we own, and suspend the production RPA for human review when a real third-party challenge appears. The checkerboard idea remains useful, but as an authorized visual-coordinate experiment rather than a recipe for defeating a live CAPTCHA.

1. Where the idea came from

A normal RPA data-acquisition flow looks approximately like this:

open page
   ↓
locate fields and controls
   ↓
submit a query
   ↓
extract structured data
   ↓
validate and store the result

The workflow becomes uncertain when the page inserts an unexpected security challenge:

expected page state
   ↓
CAPTCHA or risk challenge appears
   ↓
selectors no longer match
   ↓
blind retries, duplicate actions, or job failure

Two different automation ideas naturally follow.

Idea A: text interpretation. If the interruption contains text, an AI model could identify what is on the screen and classify the state. This is useful for detecting that a security challenge has appeared, extracting a non-sensitive error message, or routing the case. It should not automatically answer a live third-party security challenge.

Idea B: grid-based visual localization. If the interface requires a visual target, overlay a checkerboard on the screenshot. Let each cell correspond to one or several RPA pointer-motion units. Instead of asking a model for an unconstrained pixel coordinate, ask it to identify a cell. The RPA controller can then translate the discrete cell into a movement command.

The second idea is more general than CAPTCHA. It can be evaluated safely on synthetic target boards, internal QA pages, remote-desktop controls, canvas interfaces, and legacy applications that expose no usable DOM or accessibility tree.

2. CAPTCHA is not an ordinary UI element

An input field exists so software can enter data. A CAPTCHA exists specifically to determine whether the current interaction should be trusted as human. Treating the two as interchangeable leads to the wrong architecture.

The practical boundary is:

ordinary UI ambiguity
    → automation and visual localization may be appropriate

security challenge on a system we own
    → use a test mode, test key, or deterministic fixture

security challenge on a third-party production system
    → pause, escalate, and require an authorized human decision

This is not only a policy distinction. It improves reliability. A CAPTCHA can expire, change after a failed attempt, bind a response to a session, or be followed by additional risk checks. Even a visually correct endpoint does not prove that the workflow is authorized or that the resulting page state is valid.

3. The first choice should be an official interface

Before adding computer vision, ask whether the data provider offers:

  • an official API;
  • bulk export;
  • a service account;
  • a partner integration;
  • scheduled reports;
  • an approved automation channel;
  • an accessibility or support workflow.

An API usually exposes a more stable contract than a rendered page: explicit fields, status codes, pagination, rate limits, and versioning. It also separates data access from human-verification controls. If the official channel has quotas or contractual limits, the RPA should respect them rather than shifting the same workload into browser automation.

If the system is ours, automated testing should not depend on solving the production challenge. Google advises separate keys for reCAPTCHA v3 test environments and provides test behavior for reCAPTCHA v2.[1] Cloudflare similarly documents dummy Turnstile credentials that produce controlled, predictable outcomes for automated test suites.[2]

The architectural lesson is simple:

A test should verify our application flow, not train an automation to defeat our own production security control.

4. A safer RPA state machine

A robust workflow treats CAPTCHA detection as a first-class state rather than an exception buried inside a retry loop.

RUNNING
   │
   ├── expected page → EXTRACTING → VALIDATING → COMPLETE
   │
   └── challenge detected
             ↓
          PAUSED
             ↓
      HUMAN_REVIEW_TASK
          ↙         ↘
     RESUME         FAIL / DEFER
       ↓
   REVALIDATE_PAGE_STATE
       ↓
   EXTRACTING or STOPPED

The core control flow can remain deliberately boring:

if security_challenge_detected:
    capture_minimum_review_context()
    suspend_job()
    create_human_review_task()
    wait_for_authorized_outcome()
    revalidate_session_and_page_state()
    resume_or_stop()

This pattern is not unusual in enterprise automation. UiPath describes a human-in-the-loop step as suspending an automation, presenting a task to a reviewer, and continuing after the reviewer submits an outcome.[3]

The important detail is that the reviewer does not merely return a string. The reviewer returns a controlled workflow outcome such as:

CONTINUE
RETRY_FROM_SAFE_CHECKPOINT
DEFER
NOT_AUTHORIZED
SESSION_EXPIRED
STOP

The automation must then verify the page state again. It should never assume that the challenge is still current or that the underlying browser session survived the pause.

5. Where AI is useful without becoming the solver

AI can improve the orchestration around a challenge:

1. State classification: distinguish a CAPTCHA, login expiry, permission error, rate-limit page, empty result, and ordinary rendering delay. 2. Case summarization: tell the reviewer which job stopped, which data request was in progress, and which safe checkpoint can be resumed. 3. Non-security OCR: extract ordinary labels and error messages needed for routing. 4. Confidence estimation: indicate when the model is uncertain rather than forcing an action. 5. Postmortem clustering: group recurring interruption patterns so the owner can replace browser steps with a more stable integration.

AI should not be the final authority over whether a third-party security control may be bypassed. The safer role is advisory: classify, explain, and route.

6. The checkerboard idea as an authorized coordinate experiment

The grid proposal is still technically interesting. The safe way to study it is on a synthetic or owner-authorized page where the correct target coordinates are known.

Assume a cropped interface begins at screenshot origin (x0, y0). The RPA pointer moves in horizontal and vertical increments stepx and stepy. A target point (xtarget, ytarget) can be represented by discrete grid coordinates:

grid_x = round((x_target - x0) / step_x)
grid_y = round((y_target - y0) / step_y)

The inverse mapping is:

x_command = x0 + grid_x * step_x
y_command = y0 + grid_y * step_y

A model-facing response might contain only a proposed cell and confidence:

target_cell: (grid_x, grid_y)
confidence: 0.00 ... 1.00
status: TARGET_FOUND | AMBIGUOUS | NOT_FOUND

This reduces coordinate vocabulary, but it does not remove calibration error. At least six coordinate spaces may be involved:

image pixels
CSS pixels
browser viewport coordinates
screen coordinates
operating-system scaled coordinates
RPA pointer units

The experiment must therefore record:

  • screenshot width and height;
  • crop origin;
  • browser zoom;
  • device pixel ratio;
  • operating-system display scaling;
  • window position;
  • scroll offset;
  • iframe or canvas offset;
  • pointer step size;
  • model confidence;
  • ground-truth target position.

For generic drag-target testing, an endpoint cell alone may be insufficient. The interface may depend on the starting point, target tolerance, motion semantics, or application state. That is precisely why the experiment should begin on a controlled target board rather than a live security challenge.

7. How to test the grid hypothesis

This is a design proposal, not a reported experiment. It becomes useful only after it is made falsifiable.

Test fixture

Create an internal page that renders random targets with recorded ground-truth coordinates. Include separate fixtures for:

  • a point target;
  • several visually similar targets;
  • a generic drag source and destination;
  • targets near cell boundaries;
  • partially occluded targets;
  • a “no valid target” case.

Independent variables

Vary one factor at a time:

resolution
viewport size
device pixel ratio
browser zoom
grid spacing
crop offset
target size
visual clutter
image compression

Metrics

Measure more than task success:

cell accuracy
pixel mean absolute error
95th-percentile coordinate error
ambiguous-case rejection rate
false-action rate
human-review rate
recovery success after a pause

The most important metric is not average accuracy. It is the false-action rate when the model should have abstained.

Acceptance rule

A defensible controller should be able to say:

if environment_not_calibrated:
    do_not_move

if confidence_below_threshold:
    send_to_human

if multiple_targets_are_plausible:
    send_to_human

if requested_action_is_a_third_party_security_challenge:
    do_not_auto_submit

8. The grid does not solve the hardest failure modes

The checkerboard makes the output easier to express, but it does not guarantee that the chosen target is correct. Several failures remain:

8.1 Quantization error

A coarse grid reduces the number of possible actions but increases endpoint error. A fine grid improves precision but makes cell identification harder and visually noisier.

8.2 Boundary ambiguity

If a target sits between cells, small image or model variations can change the selected cell. Returning one cell without uncertainty creates false precision.

8.3 Coordinate drift

A browser resize, remote-desktop scaling change, scroll event, or window movement can invalidate the mapping after the screenshot was taken.

8.4 Stale observations

The page may change between screenshot capture and pointer movement. The controller needs an observation timestamp and a short validity window.

8.5 Model hallucination

A vision model may confidently name a target that does not exist. A valid response schema must include NOT_FOUND and AMBIGUOUS; confidence cannot be treated as calibrated until measured on the actual fixture distribution.

8.6 Workflow semantics

A visually accurate click can still be the wrong business action. The model sees pixels, while authorization may depend on account ownership, consent, rate limits, contractual terms, and data-use restrictions.

9. Auditability should be designed before automation

For every challenge-related pause, record only the minimum necessary metadata:

job_id
workflow_version
site_origin
timestamp
safe_checkpoint
challenge_category
screenshot_hash
viewport_and_scaling_metadata
reviewer_id_or_role
review_outcome
resume_timestamp
final_job_outcome

Avoid placing passwords, session cookies, access tokens, personal identifiers, or full sensitive screenshots into general logs. If a screenshot is required for human review, restrict its retention and access, and store a hash in the long-term audit record rather than retaining the image indefinitely.

The audit trail should answer four questions:

1. Why did the automation stop? 2. Who authorized the next step? 3. What state was revalidated before resumption? 4. What data was ultimately acquired and under which approved purpose?

10. Accessibility changes the design question

CAPTCHA can block legitimate users as well as bots. W3C notes that interactive CAPTCHA tasks can exclude people with disabilities and deny them access to a service.[4] That means the system owner should not treat “make the challenge harder” as the only response to automation.

For systems we control, the design review should include:

  • accessible alternatives;
  • non-interactive risk signals where appropriate;
  • support escalation;
  • multi-device or account-verification alternatives;
  • monitoring for false positives;
  • separation of development, test, and production credentials.

For an RPA consuming a third-party service, accessibility does not grant permission to automate the security challenge. It does provide another reason to ask the provider for an approved API, service account, or accommodation workflow.

11. Three falsifiable predictions

Because this article records a proposal rather than a completed implementation, its value depends on what could prove it wrong.

Prediction 1: grid output will reduce coordinate-format errors

On a controlled visual-target fixture, asking a model for a discrete cell should produce fewer malformed or out-of-bounds actions than asking for unrestricted pixel coordinates. It may still increase quantization error.

Prediction 2: calibration metadata will matter more than model size

Across changes in zoom, device pixel ratio, and crop offset, a modest model with correct coordinate transforms should outperform a stronger model connected to an uncalibrated controller.

Prediction 3: HITL will dominate full automation on rare security interruptions

If CAPTCHA events are infrequent relative to the full RPA workload, a pause-and-review queue should provide better operational reliability and governance than maintaining a brittle automated solver. This prediction should be tested using queue latency, reviewer workload, recovery success, and total engineering cost—not only per-challenge completion time.

12. Conclusion

The original idea contains a useful abstraction: convert an ambiguous image into a discrete coordinate space that an RPA controller can understand. The checkerboard can be a practical bridge between vision-model output and legacy pointer automation, especially where no DOM or accessibility tree exists.

But a CAPTCHA is not merely another hard-to-locate button. On a third-party production site, it is an intentional security boundary. The correct architecture is therefore not “AI solves everything the RPA cannot see.” It is:

official API where available
        ↓
controlled test keys in systems we own
        ↓
AI-assisted state detection and routing
        ↓
human review for real third-party challenges
        ↓
state revalidation, bounded resumption, and audit

The strongest version of the proposal is not a CAPTCHA solver. It is an interruption-handling system that knows when automation has reached the edge of its authority.

RESEARCH & FIELD NOTES/

RPA 遇到验证码:从 AI 视觉设想到可审计的人机协作流程

本文记录一个尚未实施的 RPA 设计设想:文字界面可由 AI 辅助理解,点击或拖动界面可用与鼠标步长对齐的棋盘网格表达坐标。文章进一步解释为什么生产环境中的第三方 CAPTCHA 不应被当作普通 UI 自动化,并将该设想收敛为官方 API、测试密钥、人工介入、坐标校准、置信度门控和审计日志组成的安全工作流。

一篇设计记录,而不是验证码绕过教程

摘要

很多 robotic process automation 流程最脆弱的时刻,是数据采集任务运行到一半突然遇到 CAPTCHA。传统 RPA 假设字段、按钮和坐标相对稳定,而 CAPTCHA 正是为了打断这种假设:它要求系统判断当前交互是否应当被信任为人类操作。

这篇文章从一个尚未实施的设想出发。对于文字界面,可以让 vision-language model 理解页面上的文字;对于点击或拖动界面,可以在截图上覆盖一个棋盘网格,让网格间距与 RPA 鼠标移动单位对齐,再由模型指出目标格子,控制器把格子坐标转换成鼠标移动量。这个思路很有吸引力,因为它把连续屏幕压缩成了较小的离散动作空间。

但这里隐藏着一条重要边界:在真实第三方网站上,自动解答并提交 CAPTCHA 并不是普通 UI 自动化,而是在绕过网站所有者专门设置的反自动化控制。因此,工程目标应该被重新表述:能走官方 API 就不抓页面;自有系统使用官方 test mode 或 test keys;第三方生产环境真的出现验证码时,RPA 暂停并交给人工处理。棋盘网格的想法仍然有技术价值,但它应该成为授权环境里的视觉坐标实验,而不是破解真实 CAPTCHA 的操作手册。

一、这个设想从哪里来

一个普通 RPA 数据获取流程大致是:

打开页面
   ↓
定位字段和控件
   ↓
提交查询
   ↓
提取结构化数据
   ↓
验证并保存结果

当页面插入一个意外的安全挑战时,流程开始变得不确定:

预期页面状态
   ↓
出现 CAPTCHA 或风险验证
   ↓
原有 selector 不再匹配
   ↓
盲目重试、重复操作或任务失败

由此很自然地会产生两个自动化设想。

设想 A:文字理解。 如果中断页面上有文字,AI 可以识别当前页面状态。这对于检测“这里出现了安全挑战”、提取普通错误信息和分流任务是有用的,但不应该直接用于自动回答第三方生产环境中的安全验证问题。

设想 B:网格化视觉定位。 如果页面要求视觉定位,就在截图上套一层棋盘网格,让每个格子对应一个或几个 RPA 鼠标移动单位。与其让模型直接输出任意像素坐标,不如让它指出某个格子,再由 RPA 控制器把离散格子转换成移动指令。

第二个设想其实并不局限于 CAPTCHA。它可以安全地用于 synthetic target board、内部 QA 页面、remote desktop 控件、canvas 界面,以及没有可用 DOM 或 accessibility tree 的遗留应用。

二、CAPTCHA 不是普通 UI 元素

输入框存在的目的,就是让用户或软件输入数据。CAPTCHA 的目的则是判断当前交互是否应被信任为人类行为。把两者当成同一种自动化对象,会直接导向错误的架构。

更合理的边界是:

普通 UI 定位不确定
    → 可以考虑自动化和视觉定位

自有系统里的安全挑战
    → 使用 test mode、test key 或固定测试样例

第三方生产系统里的安全挑战
    → 暂停、升级并要求经过授权的人工决定

这不只是合规区分,也会提高可靠性。CAPTCHA 可能会过期,失败后可能刷新,也可能与具体 session 绑定,完成后还可能出现其他风险检查。即使视觉终点判断正确,也不能证明该流程获得了授权,更不能证明后续页面状态仍然有效。

三、第一选择应该是官方接口

在引入 computer vision 之前,应该先确认数据提供方是否有:

  • 官方 API;
  • bulk export;
  • service account;
  • partner integration;
  • 定时报表;
  • 获批的自动化通道;
  • accessibility 或 support workflow。

API 通常比渲染后的页面提供更稳定的契约,例如明确字段、状态码、分页、rate limit 和版本。它还能把数据访问与人机验证控制分开。如果官方接口存在配额或合同限制,RPA 应该遵守,而不是把同样的访问量转移到浏览器自动化中。

如果系统归我们所有,自动化测试就不应该依赖“解决生产 CAPTCHA”。Google 建议 reCAPTCHA v3 的测试环境使用独立 key,并为 reCAPTCHA v2 提供测试行为。[1] Cloudflare 也为 Turnstile 提供可预测结果的 dummy credentials,专门支持自动化测试。[2]

这背后的架构原则很简单:

测试应该验证我们的应用流程,而不是训练一套自动化去击败自己的生产安全控制。

四、把验证码变成 RPA 的一等状态

可靠的工作流应该把 CAPTCHA detection 设计成明确状态,而不是埋在 retry loop 里的异常:

RUNNING
   │
   ├── 页面正常 → EXTRACTING → VALIDATING → COMPLETE
   │
   └── 检测到安全挑战
             ↓
          PAUSED
             ↓
      HUMAN_REVIEW_TASK
          ↙         ↘
     RESUME         FAIL / DEFER
       ↓
   REVALIDATE_PAGE_STATE
       ↓
   EXTRACTING 或 STOPPED

核心控制流可以保持得非常朴素:

如果检测到安全挑战:
    捕获人工判断所需的最少上下文
    暂停任务
    创建人工审核任务
    等待经过授权的处理结果
    重新验证 session 和页面状态
    恢复或停止

这种模式在企业自动化中很常见。UiPath 对 human-in-the-loop 的定义就是暂停自动化,将任务交给人工 reviewer,并在 reviewer 提交结果后继续运行。[3]

关键在于,人工不应该只返回一个字符串,而应该返回受控的工作流结果:

CONTINUE
RETRY_FROM_SAFE_CHECKPOINT
DEFER
NOT_AUTHORIZED
SESSION_EXPIRED
STOP

之后 RPA 必须重新检查页面。它不能假设原 CAPTCHA 仍然有效,也不能假设浏览器 session 在暂停期间没有失效。

五、AI 有价值,但不需要成为“解题者”

AI 可以改善安全挑战周围的编排工作:

1. 状态分类: 区分 CAPTCHA、登录过期、权限错误、rate-limit 页面、空结果和普通加载延迟。 2. 案例摘要: 告诉 reviewer 哪个任务暂停、当时正在请求什么数据、可以从哪个 safe checkpoint 恢复。 3. 非安全 OCR: 提取分流所需的普通标签和错误信息。 4. 置信度表达: 在模型不确定时明确拒绝动作,而不是强行点击。 5. 事后聚类: 汇总重复出现的中断模式,帮助系统所有者把不稳定的浏览器步骤替换为正式集成。

AI 不应成为“第三方安全控制是否可以被绕过”的最终决策者。它更合适的角色是提供建议:识别、解释和分流。

六、把棋盘网格变成授权坐标实验

棋盘网格仍然是一个值得研究的技术设想。安全的研究方式是在 synthetic page 或获得系统所有者授权的页面上进行,并且测试系统能够提供真实目标坐标。

假设截图中的目标区域从 (x0, y0) 开始,RPA 鼠标每次水平和垂直移动的单位分别为 stepxstepy。目标点 (xtarget, ytarget) 可以表示为离散网格:

grid_x = round((x_target - x0) / step_x)
grid_y = round((y_target - y0) / step_y)

反向映射为:

x_command = x0 + grid_x * step_x
y_command = y0 + grid_y * step_y

模型可以只返回候选格子和置信度:

target_cell: (grid_x, grid_y)
confidence: 0.00 ... 1.00
status: TARGET_FOUND | AMBIGUOUS | NOT_FOUND

这种方式缩小了坐标输出空间,但不会自动消除 calibration error。真实流程里至少可能同时存在六套坐标:

图片像素
CSS pixel
浏览器 viewport 坐标
屏幕坐标
操作系统缩放后的坐标
RPA 鼠标移动单位

因此实验至少要记录:

  • 截图宽高;
  • crop origin;
  • browser zoom;
  • device pixel ratio;
  • 操作系统 display scaling;
  • 窗口位置;
  • scroll offset;
  • iframe 或 canvas offset;
  • pointer step size;
  • 模型置信度;
  • ground-truth target position。

即使只研究普通 drag target,单个终点格子也可能不够。界面可能同时依赖起点、目标容差、移动语义和应用状态。这正是为什么实验应该先在受控 target board 上做,而不是直接拿真实安全挑战试验。

七、怎样验证网格假设

这是一份设计提案,不是已经完成的实验。只有让它变得可证伪,它才真正具有工程价值。

测试页面

建立一个内部页面,随机生成目标并同步记录 ground truth,分别覆盖:

  • 单个点目标;
  • 多个外观相似的目标;
  • 普通 drag source 和 destination;
  • 位于格子边界附近的目标;
  • 部分遮挡目标;
  • “没有有效目标”的样例。

自变量

每次只改变一个因素:

分辨率
viewport size
device pixel ratio
browser zoom
grid spacing
crop offset
target size
visual clutter
image compression

指标

不能只看最终任务是否成功:

cell accuracy
pixel mean absolute error
95th-percentile coordinate error
ambiguous-case rejection rate
false-action rate
human-review rate
暂停后的恢复成功率

最关键的不是平均 accuracy,而是:当模型本来应该放弃时,它错误执行动作的比例有多高。

接受规则

一个可防守的控制器至少应该做到:

如果环境没有完成校准:
    不移动鼠标

如果置信度低于阈值:
    交给人工

如果存在多个合理目标:
    交给人工

如果请求的动作属于第三方安全挑战:
    不自动提交

八、网格并没有解决最难的失败模式

棋盘网格只是让输出更容易表达,并不能保证模型选中的目标正确。

8.1 量化误差

粗网格减少了可能动作数量,却会放大终点误差。细网格提高精度,却会增加格子识别难度和视觉噪声。

8.2 边界歧义

如果目标位于两个格子之间,轻微的图像变化或模型波动都可能改变答案。强制只返回一个格子,会制造虚假的精确性。

8.3 坐标漂移

浏览器尺寸变化、remote desktop 缩放、页面滚动或窗口移动,都可能让截图之后的坐标映射失效。

8.4 过期观测

截图生成后,页面可能在鼠标移动前已经发生变化。因此控制器需要 observation timestamp 和很短的有效期。

8.5 模型幻觉

Vision model 可能非常自信地指出一个根本不存在的目标。返回协议必须包含 NOT_FOUNDAMBIGUOUS;在真实测试数据上完成校准之前,模型的 confidence 不能直接当作正确概率。

8.6 工作流语义

即使一次点击在视觉上完全准确,仍可能是错误的业务动作。模型看到的是像素,而授权还取决于账户所有权、用户同意、rate limit、合同条款和数据使用范围。

九、先设计审计,再设计自动化

每次因为安全挑战暂停时,只记录必要的最小元数据:

job_id
workflow_version
site_origin
timestamp
safe_checkpoint
challenge_category
screenshot_hash
viewport_and_scaling_metadata
reviewer_id_or_role
review_outcome
resume_timestamp
final_job_outcome

普通日志中不要保存密码、session cookie、access token、个人敏感信息或完整敏感截图。如果人工审核确实需要截图,应限制访问权限和保留期限;长期审计记录优先保留 screenshot hash,而不是无限期保存原图。

审计日志应该能够回答四个问题:

1. 自动化为什么停止? 2. 谁授权了下一步? 3. 恢复前重新验证了什么状态? 4. 最终获取了哪些数据,基于什么获批目的?

十、无障碍问题会改变设计目标

CAPTCHA 不仅会阻止机器人,也可能阻止合法用户。W3C 指出,交互式 CAPTCHA 任务可能排除残障用户,导致他们无法使用服务。[4] 因此,系统所有者不应把“继续增加挑战难度”作为唯一应对方案。

对于我们控制的系统,设计评审还应该覆盖:

  • accessible alternatives;
  • 合适的 non-interactive risk signals;
  • support escalation;
  • multi-device 或 account-verification alternatives;
  • false positive 监控;
  • development、test 和 production credentials 分离。

对于访问第三方服务的 RPA,无障碍需求并不自动赋予绕过安全挑战的权限,但它提供了另一个理由:向服务提供方申请正式 API、service account 或 accommodation workflow。

十一、三个可证伪的预测

因为这篇文章记录的是技术设想而非实施结果,所以它的价值取决于什么证据可以证明它不成立。

预测一:网格输出会减少坐标格式错误

在受控 visual-target fixture 上,让模型输出离散格子,应该比输出不受限制的像素坐标产生更少的格式错误和越界动作,但量化误差可能会上升。

预测二:校准元数据比模型尺寸更重要

当 zoom、device pixel ratio 和 crop offset 变化时,一个正确处理坐标转换的中等模型,应该优于连接到未校准控制器的更强模型。

预测三:低频安全中断更适合 HITL

如果 CAPTCHA 在整体 RPA 工作量中只是低频事件,那么暂停并进入人工队列,应该比长期维护一个脆弱的自动 solver 提供更好的可靠性和治理效果。验证时应比较 queue latency、reviewer workload、恢复成功率和总体工程成本,而不只是单次挑战完成时间。

十二、结论

最初设想里包含一个有价值的抽象:把难以描述的图像转换成 RPA 能理解的离散坐标空间。尤其在没有 DOM 或 accessibility tree 的遗留界面中,棋盘网格可以成为 vision model 与 pointer automation 之间的桥梁。

但 CAPTCHA 并不是另一个“很难定位的按钮”。在第三方生产网站上,它是一条被有意设置的安全边界。正确的架构不应该是“凡是 RPA 看不懂的,都交给 AI 自动解决”,而应该是:

优先使用官方 API
        ↓
自有系统使用受控 test keys
        ↓
AI 辅助检测页面状态并分流
        ↓
真实第三方挑战交给人工处理
        ↓
重新验证状态、受控恢复并保留审计

这个设想最强的版本不是 CAPTCHA solver,而是一套知道自动化权限边界在哪里的 interruption-handling system。

Sources

[1] https://developers.google.com/recaptcha/docs/faq — Frequently Asked Questions [2] https://developers.cloudflare.com/turnstile/troubleshooting/testing — Test your Turnstile implementation · Cloudflare Turnstile docs [3] https://docs.uipath.com/coding-agents/standalone/latest/user-guide/human-in-the-loop — UiPath for Coding Agents - Human-in-the-loop tasks (Preview) [4] https://www.w3.org/TR/turingtest — Inaccessibility of CAPTCHA

END OF NOTEContinue reading ↗