使用Node.js和Puppeteer的Instagram登录Bot遇CSRF令牌错误的解决方法
解决Instagram登录Bot的“CSRF token missing or incorrect”错误
出现这个错误的核心原因是Instagram登录表单需要携带自动生成的CSRF令牌(csrfmiddlewaretoken),直接点击按钮可能因为页面交互未就绪、令牌未正确加载或提交时未携带令牌导致失败。以下是具体解决方法和修改后的代码:
关键修复点
- 确保等待CSRF令牌元素加载完成后再进行后续操作
- 模拟真实用户输入速度,避免触发反爬机制
- 通过表单提交代替直接点击按钮,确保令牌被正确携带
- 等待登录请求完成后再关闭浏览器
修改后的代码示例
const browser = await puppeteer.launch({ headless: false, }); const page = await browser.newPage(); await page.setUserAgent("Mozilla/5.0 (X11; CrOS x86_64 10066.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"); // 加载登录页,等待页面完全加载 await page.goto('https://www.instagram.com/accounts/login/', { waitUntil: 'load' }); // 等待CSRF令牌和账号输入框加载完成 await page.waitForSelector('input[name="csrfmiddlewaretoken"]', { timeout: 100000 }); await page.waitForSelector(cnf.username_field, { timeout: 100000 }); await page.screenshot({ path: `screenshots/1.jpeg` }); // 模拟真实用户输入速度输入账号密码 await page.type(cnf.username_field, cnf.username, { delay: 100 }); await page.type(cnf.password_field, cnf.password, { delay: 100 }); await page.screenshot({ path: `screenshots/2.jpeg` }); // 通过提交表单确保携带CSRF令牌 await page.evaluate(() => { document.querySelector('form').submit(); }); // 等待登录跳转完成后再关闭浏览器 await page.waitForNavigation({ waitUntil: 'networkidle2' }); await browser.close();
额外注意事项
- 若仍有问题,检查你的选择器(
cnf.username_field、cnf.password_field)是否准确指向表单元素 - 避免短时间内重复登录,Instagram的反爬机制会拦截频繁的自动化请求
- 可以尝试保留浏览器会话(比如使用
userDataDir配置),减少每次登录的验证压力
内容的提问来源于stack exchange,提问作者Alex Jackson
相关产品推荐
相关产品推荐

