使用Cypress删除Facebook账号时登录遇「请求无法处理」错误如何解决
Cypress登录Facebook报错问题解决方案
Cypress运行环境与普通手动浏览器的核心差异
你遇到的登录拦截是Facebook反自动化检测系统触发的,Cypress运行环境和普通手动浏览器的核心区别有以下几点:
- 存在自动化标识:Cypress默认会向页面注入
window.Cypress全局属性,同时浏览器的navigator.webdriver属性值为true,这两个是最常见的自动化工具识别特征,会被Facebook的反爬系统直接标记拦截。 - 请求特征差异:Cypress默认会代理所有页面请求,部分请求会附带Cypress专属的请求头标识,用户代理字符串也可能携带Cypress相关字段,同样会被检测。
- 操作行为差异:代码执行的输入、点击操作没有人类操作的随机间隔,账号密码是瞬间填充完成,和手动输入的行为特征完全不符,会触发行为校验拦截。
手动在Cypress打开的浏览器里开新标签页可以正常登录,就是因为新标签页没有被Cypress注入特征,也没有走Cypress的请求代理,和普通浏览器环境完全一致。
具体修复方案
第一步:修改Cypress配置屏蔽自动化特征
打开你的cypress.config.js文件,添加以下配置项:
const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { experimentalSessionAndOrigin: true, chromeWebSecurity: false, modifyObstructiveCode: false, onBeforeBrowserLaunch: (browser, launchOptions) => { // 屏蔽webdriver标识 launchOptions.args.push("--disable-blink-features=AutomationControlled"); // 替换为和你本地普通Chrome浏览器一致的UA标识 launchOptions.args.push(`--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36`); return launchOptions; }, }, });
第二步:添加脚本移除Cypress全局注入标识
在cypress/support/e2e.js文件中添加以下代码,在页面加载前移除自动化相关标识:
Cypress.on('window:before:load', (win) => { delete win.Cypress; Object.defineProperty(win.navigator, 'webdriver', { get: () => undefined, }); });
第三步:调整测试代码模拟人类操作
修改你的测试代码,给输入、点击操作添加随机延迟,避免行为校验:
describe('obfuscate data', () => { // 替换为你的账号密码 const email = "your_email"; const password = "your_password"; before(() => { cy.visit('https://facebook.com', { headers: { "accept-language": "zh-CN,zh;q=0.9,en;q=0.8" } }); // 输入账号添加随机延迟 cy.get('#email').type(email, { delay: Math.floor(Math.random() * 100) + 50 }); cy.wait(Math.floor(Math.random() * 1000) + 500); // 输入密码添加随机延迟 cy.get('#pass').type(password, { delay: Math.floor(Math.random() * 100) + 50 }); cy.wait(Math.floor(Math.random() * 1000) + 500); // 点击登录 cy.get('form button').click(); }); it('should be logged in', () => { // 替换为你的账号显示的名称 cy.contains("What's on your mind, XXXX?"); }); });
完成以上修改后重新运行测试,即可绕过Facebook的自动化检测完成登录。
内容的提问来源于stack exchange,提问作者lolman45
相关产品推荐
相关产品推荐

