Puppeteer/Axios获取的_abck令牌无法用于银行账户登录问题
问题分析与解决方案
为什么会出现这个问题?
_abck是Akamai(主流CDN/反爬服务商)生成的会话验证Cookie,它的有效性和浏览器指纹、会话上下文强绑定:
- Puppeteer默认启动的Chromium带有明显自动化特征(比如
navigator.webdriver属性为true),Akamai反爬系统会识别出这是自动化工具,生成的_abck会被标记为无效,直接拒绝后续登录请求。 - 哪怕你在Puppeteer启动的Chromium里手动操作,这个会话的初始指纹已经被Akamai标记为可疑,所以生成的
_abck依然无法通过验证。 - Axios直接请求完全没有浏览器环境的JS执行上下文,Akamai不会生成合法的
_abck,自然返回403。
如何编程获取可用的_abck?
核心思路是模拟真实用户的浏览器环境和操作路径,绕过Akamai的指纹检测:
1. 消除自动化指纹
使用puppeteer-extra搭配stealth插件,它会自动修改Chromium的多个特征,让浏览器更接近真实用户:
const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); puppeteer.use(StealthPlugin());
同时添加启动参数,彻底禁用自动化标记:
const browser = await puppeteer.launch({ headless: false, // 先开有头模式排查问题 args: [ '--disable-blink-features=AutomationControlled', '--start-maximized', // 模拟真实窗口尺寸 '--no-sandbox' // 部分环境需要,按需添加 ] });
2. 模拟真实用户操作路径
不要直接请求登录页,先访问银行首页,等待页面加载完成并执行所有Akamai验证脚本,再逐步操作到登录页:
const page = await browser.newPage(); await page.setViewport({ width: 1920, height: 1080 }); // 先访问首页,等待网络空闲(确保Akamai脚本执行完成) await page.goto('https://你的银行首页地址', { waitUntil: 'networkidle2' }); // 模拟用户浏览等待 await page.waitForTimeout(3000); // 点击登录按钮跳转(不要直接goto登录URL) await page.click('#登录按钮的CSS选择器'); await page.waitForNavigation({ waitUntil: 'networkidle2' }); // 此时获取的_abck就是合法的 const cookies = await page.cookies(); const validAbck = cookies.find(c => c.name === '_abck');
3. 关键注意事项
- 必须在同一个浏览器会话里完成Cookie获取、登录操作,不要把Cookie导出给Axios单独使用——Akamai会校验会话的其他上下文(比如IP、User-Agent、关联Cookie)。
- 银行网站可能还有额外验证(比如短信验证码、滑动验证),需要针对性处理,部分场景可能需要手动介入,但务必遵守平台规则。
- 爬取银行账户数据可能违反用户协议,甚至涉及法律风险,操作前请务必确认相关条款的合法性。
内容的提问来源于stack exchange,提问作者Neithan Max
相关产品推荐
相关产品推荐

