You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Requests登录Instagram无法获取CSRF Token和Session ID求助

解决Instagram登录无法获取CSRF Token和Session ID的问题

核心问题分析

当前代码无法获取CSRF Token和Session ID,主要原因是Instagram反爬机制更新、CSRF Token存储位置变化,以及请求头/参数不符合平台当前要求。


针对性解决方案

1. 调整CSRF Token提取逻辑

Instagram目前更倾向于将CSRF Token存入Cookie而非页面源码,原正则解析HTML的方式已失效,优先从响应Cookie中提取:

# 替换原正则提取逻辑
csrf = s.cookies.get('csrftoken')
# 兼容降级:若Cookie中无Token,再尝试从页面源码提取
if not csrf:
    csrf_match = re.search(r'"csrf_token":"(.*?)"', response.text)
    csrf = csrf_match.group(1) if csrf_match else None

2. 修正请求头与参数

  • Referer地址错误:登录请求的Referer应指向登录页面,而非API接口
  • User-Agent过时:更换为最新浏览器UA,避免被识别为非浏览器请求
  • 补充现代浏览器头:添加sec-ch-ua系列头,模拟真实浏览器环境
  • 调整Payload参数:queryParams改为空字符串(避免表单序列化异常),optIntoOneTap设为true

3. 优化请求顺序

先访问Instagram主站获取初始Cookie,再请求登录页,确保Session初始化完整:

# 先访问主站获取基础Cookie
s.get('https://www.instagram.com/')
# 再访问登录页
response = s.get('https://www.instagram.com/accounts/login/')

修改后的完整代码

import requests
import datetime
import re

# 初始化Session
s = requests.Session()

# 1. 预加载主站,获取初始Cookie
s.get('https://www.instagram.com/')

# 2. 访问登录页
login_page_url = 'https://www.instagram.com/accounts/login/'
login_page_response = s.get(login_page_url)

# 3. 提取CSRF Token
csrf = s.cookies.get('csrftoken')
if not csrf:
    csrf_match = re.search(r'"csrf_token":"(.*?)"', login_page_response.text)
    csrf = csrf_match.group(1) if csrf_match else None

print("初始Cookie: ", s.cookies.get_dict())

# 4. 准备登录参数
timestamp = int(datetime.now().timestamp())
username = '你的账号'
password = '你的密码'

payload = {
    'username': username,
    'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{timestamp}:{password}',
    'queryParams': '',
    'optIntoOneTap': 'true'
}

# 5. 构造合规请求头
login_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    "Referer": login_page_url,
    "x-csrftoken": csrf,
    "X-IG-App-ID": "936619743392459",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "*/*",
    "sec-ch-ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\""
}

# 6. 发送登录请求
login_api_url = 'https://www.instagram.com/accounts/login/ajax/'
login_response = s.post(login_api_url, data=payload, headers=login_headers, allow_redirects=True)

print("登录后Cookie: ", s.cookies.get_dict())
print("登录响应内容: ", login_response.json())

额外注意事项

  • 若仍无法获取Session ID,大概率是IP被Instagram限制,需更换代理IP
  • 避免频繁请求,添加1-3秒随机延迟,降低反爬触发概率
  • 检查登录响应的JSON内容,若返回authenticated: false,需排查账号密码、加密格式或头信息是否正确

内容的提问来源于stack exchange,提问作者zied cheheibi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:25:31