如何编写Python脚本实现Instagram自动注册并解决csrftoken报错
Instagram 自动注册脚本 csrftoken 获取报错解决方案
报错核心原因
- 初始请求路径不匹配:当前代码直接请求Instagram根域名,服务器不会在根路径响应中下发注册流程需要的csrftoken鉴权cookie,导致从会话cookie中读取该值时触发KeyError。
- 请求头未做浏览器模拟:requests库默认的请求标识会被Instagram的反爬规则识别为非真实浏览器流量,服务器会直接丢弃所有鉴权cookie的下发流程,不会返回csrftoken。
- 代码逻辑存在疏漏:注册参数字段存在拼写错误(
fisrt_name应为first_name),POST提交的接口地址错误,未按照要求在请求头中携带获取到的csrftoken。
分步修复方案
- 给Session对象配置基础浏览器请求头,降低被反爬拦截的概率
c.headers.update({ "User-Agent": "Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", }) - 调整初始请求的路径,触发服务器下发正确的csrftoken
把原代码中直接请求根域名的逻辑,替换为请求注册页面地址https://www.instagram.com/accounts/signup/,此时服务器会在响应的Set-Cookie头中返回对应路径、域名绑定的csrftoken,可通过会话对象正常读取。 - 优化cookie读取逻辑,避免直接抛出KeyError中断脚本
把硬索引读取cookie的写法csrftoken = c.cookies['csrftoken']替换为带空值判断的读取逻辑:c.get("https://www.instagram.com/accounts/signup/") csrftoken = c.cookies.get("csrftoken") if not csrftoken: raise RuntimeError("未成功获取csrftoken,可能被服务器反爬拦截,请调整请求频率或UA标识") - 修正注册提交的接口、参数与请求头
原代码把注册数据直接POST到根域名是无效逻辑,Instagram的注册提交实际走异步API端点,请求时必须把获取到的csrftoken放到自定义请求头中,示例代码片段:register_api = "https://www.instagram.com/accounts/web_create_ajax/" register_data = dict( email=EMAIL, password=PASSWORD, username=USERNAME, first_name=NAME, seamless_login_enabled=1 ) post_headers = { "X-CSRFToken": csrftoken, "Referer": "https://www.instagram.com/accounts/signup/", "X-Requested-With": "XMLHttpRequest" } c.post(register_api, data=register_data, headers=post_headers)
注意事项
- 目前Instagram注册流程会叠加设备指纹校验、邮箱验证码校验、IP风控规则,静态requests请求很难通过全流程校验,频繁发起请求还会触发IP封禁、设备标记,不建议用纯脚本做批量自动注册操作。
- 若获取csrftoken的步骤持续失败,可适当降低请求频率,补充更完整的浏览器请求头字段,避免被服务器直接拦截。
内容的提问来源于stack exchange,提问作者Wisdom Upeh
相关产品推荐
相关产品推荐

