You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright C#自动化登录遇Captcha干扰 点击按钮无响应问题

问题根因

谷歌reCAPTCHA内置反机器人校验逻辑,会监听完整的用户原生交互事件链(输入时的键盘事件、焦点切换、点击的位置/时延特征等)判断操作是否来自真人。
当前代码存在两个明确问题:

  • FillAsync 方法直接修改输入框DOM值,不会完整触发keydown/input/blur等原生事件,密码输入完成后焦点停留在输入框内,表单前置校验未完成,登录按钮点击后无法走到captcha触发逻辑
  • 默认无参数的ClickAsync点击位置固定在元素正中心、按下抬起无延迟,特征过于明显,会被reCAPTCHA标记为自动化操作拦截响应,直到手动按键盘触发原生交互事件后,才满足captcha的激活条件。
修复方案

按优先级依次调整代码即可解决问题:

1. 补全输入流程的原生事件

填完密码后模拟按Tab键切走焦点,触发输入框失焦事件,让表单完成前置校验:

await page.FillAsync("#email", "test@gmail.com");
await page.Locator("#password").FillAsync("Pass.123");
// 模拟真人输入完按Tab切焦点的操作,触发blur事件
await page.Keyboard.PressAsync("Tab");

2. 给登录按钮点击添加真人操作特征

不要调用无参数的点击方法,配置随机偏移位置、按下抬起时延,绕过基础机器人特征检测:

await page.Locator("button", new PageLocatorOptions { HasTextString = "SIGN IN" })
    .ClickAsync(new LocatorClickOptions
    {
        // 点击按钮内随机偏移位置,避开固定正中心的自动化特征
        Position = new Position { X = 25 + Random.Shared.Next(0, 30), Y = 8 + Random.Shared.Next(0, 10) },
        // 模拟真人点击100-200ms的按键按下抬起延迟
        Delay = Random.Shared.Next(100, 200)
    });

3. 兜底触发captcha激活

如果前两步调整后仍未触发验证码,点击后等待短时间模拟一次无业务影响的键盘按键,匹配手动按键触发的场景:

// 等待页面响应500ms
await page.WaitForTimeoutAsync(500);
// 按下不触发业务操作的修饰键,激活captcha事件监听
await page.Keyboard.PressAsync("Shift");

4. 关闭浏览器自动化标识

启动浏览器时添加参数去掉自动化标记,从入口降低被reCAPTCHA识别的概率:

var launchOptions = new BrowserTypeLaunchOptions
{
    Args = new[]
    {
        "--disable-blink-features=AutomationControlled",
        "--start-maximized"
    }
};
await using var browser = await playwright.Chromium.LaunchAsync(launchOptions);

注意:不要在点击登录按钮后立刻执行截图操作,至少等待1-2秒给captcha脚本加载、渲染的时间,否则截图会停留在验证码未触发的状态。

内容的提问来源于stack exchange,提问作者Vignesh S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:31:36