如何绕过Kasada机器人防护?Nike爬虫NodeJS/Puppeteer遇阻求助
绕过Nike的Kasada Bot Mitigation防护问题
我正在开发一款工具,功能是用用户账号登录Nike,导航到最近订单页面爬取信息后发送到Discord Webhook。Nike采用Akamai与Kasada防护,我已找到绕过Akamai的方法,但被Kasada拦截,出现“Error parsing server”错误。尝试过无头浏览器、代理、禁用AutomationControlled等方式均无效,本人为爬虫新手,使用NodeJS和Puppeteer开发,以下是当前代码及报错位置:
const prompt = require("prompt-sync")({ sigint: true }); const fs = require("fs"); const { Webhook, MessageBuilder } = require("discord-webhook-node"); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); puppeteer.use(StealthPlugin()); /* const proxy = '208.194.232.77:8080'; const username = '3cw7073bgg'; const password = '2c0309ffc2'; */ ( async () => { // 初始化浏览器 const browser = await puppeteer.launch({ headless: false, // false = 显示浏览器 | true = 隐藏浏览器 executablePath: `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`, userDataDir: `/Users/Library/Application Support/Google/Chrome/Default`, ignoreDefaultArgs: ['--enable-automation'], args: [ // `--proxy-server=${proxy}`, // 代理配置 `--disable-blink-features=AutomationControlled`, `--enable-blink-feautres=IdleDetection` ] }); // 用户输入项 /*let webhookURL = prompt("输入你的Discord Webhook地址: ");*/ let accountEmail = prompt("输入你的账号邮箱: "); let accountPassword = prompt("输入你的账号密码: "); // 打开新标签页 const page = await browser.newPage(); // 保存Cookie到本地(注释状态) /* const saveCookie = async (page) => { const cookies = await page.cookies(); const cookieJson = JSON.stringify(cookies, null, 2); await fs.writeFile('cookies.json', cookieJson) } // 加载本地Cookie(注释状态) const loadCookie = async (page) => { const cookieJson = await fs.readFile('cookies.json'); const cookies = JSON.parse(cookieJson); await page.setCookie(...cookies); } */ // 浏览器配置 await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'); await page.setJavaScriptEnabled(true); await page.setCacheEnabled(true); await page.setBypassCSP(true); await page.setViewport({ width: 1920, height: 1080 }); // await page.authenticate({ username, password }); // 代理认证 await page.setDefaultNavigationTimeout(60000); await page.goto("https://www.nike.com/"); console.log('浏览器已成功打开!'); // ---------------- 登录流程 ---------------- // // 导航到登录页面 await page.waitForSelector('.nav-btn.p0-sm.d-sm-b.body-4.u-bold.ml2-sm.mr2-sm'); await page.click('.nav-btn.p0-sm.d-sm-b.body-4.u-bold.ml2-sm.mr2-sm'); console.log("正在跳转至登录页面...") // 输入账号邮箱 await page.waitForSelector('#username'); await page.click("#username", { delay: 500 }); console.log("正在输入邮箱地址..."); await page.keyboard.type(`${accountEmail}`, { delay: 750 }); console.log('账号邮箱已输入!'); await page.waitForSelector('.css-14l6ovh.btn-primary-dark.btn-lg') await page.keyboard.press("Enter", { delay: 30000 }); // <= 此处等待服务器响应后报错 })();
针对Kasada防护的优化建议:
- 修复代码拼写错误:启动参数中的
--enable-blink-feautres是拼写错误,正确应为--enable-blink-features,错误配置会导致IdleDetection功能失效,增加被检测概率。 - 调整浏览器启动参数:
- 移除
userDataDir对默认Chrome目录的引用,改用独立的用户数据目录(如./chrome-profile),共享浏览器数据容易被识别。 - 添加
--no-sandbox、--disable-setuid-sandbox(开发环境可用,生产环境需注意安全)。 - 补充
--disable-web-security、--disable-features=VizDisplayCompositor参数,减少自动化特征暴露。
- 移除
- 优化交互逻辑:
- 不要直接用回车提交表单,模拟真实用户点击登录按钮:
await page.click('.css-14l6ovh.btn-primary-dark.btn-lg', {delay: 1000})。 - 在操作间增加随机延迟,比如
await page.waitForTimeout(Math.random() * 2000 + 1000),模拟人类操作节奏。
- 不要直接用回车提交表单,模拟真实用户点击登录按钮:
- 强化浏览器混淆:
- 确保
puppeteer-extra-plugin-stealth是最新版本,旧版本特征已被Kasada识别。 - 在页面加载前注入脚本手动修改
navigator.webdriver:await page.evaluateOnNewDocument(() => { Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); });
- 确保
- 代理使用优化:
- 放弃公开免费代理,改用高质量住宅代理,且每个会话更换独立IP。
- 确保代理配置完整的请求头(如
X-Forwarded-For、Via),避免代理特征暴露。
- 减少登录环节检测:
- 手动登录一次目标账号,保存有效会话Cookie,后续直接加载Cookie跳过登录流程。
- 控制脚本运行频率,避免频繁请求触发防护机制。
内容的提问来源于stack exchange,提问作者JediSZN
相关产品推荐
相关产品推荐

