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
相关产品推荐
相关产品推荐

