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

如何使用Selenium [Python]保持Instagram登录状态

解决Instagram爬虫会话保持与Cookie有效加载问题

Instagram的反爬机制会绑定会话的多个维度(Cookie、请求头、IP、设备标识),仅用pickle保存部分Cookie不足以维持有效会话,以下是几种可靠的解决方案:

1. 直接复用浏览器用户数据目录(Selenium/Chrome)

Instagram的完整会话数据(包括Cookie、本地存储、Session信息)会存在浏览器的用户数据目录中,直接指定该目录启动浏览器,就能继承已登录状态:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
# 替换为你的Chrome用户数据实际路径,Windows示例如下
options.add_argument(r"user-data-dir=C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data")
options.add_argument(r"profile-directory=Default") # 使用默认配置文件

driver = webdriver.Chrome(options=options)
driver.get("https://instagram.com")
# 此时会直接进入已登录状态,无需再次验证

注意:首次使用前需要手动在该浏览器配置文件中完成Instagram登录,后续启动都会复用这个会话。

2. 完整保存Session对象+匹配请求头(Requests库)

仅存Cookie不够,必须同步保存并复用登录时的请求头,尤其是User-Agent和X-CSRFToken,这两个是Instagram验证会话的关键:

保存会话

import pickle
import requests

# 初始化Session并完成登录流程(此处省略登录代码)
session = requests.Session()
# 登录成功后保存完整Session的Cookie和请求头
with open('ig_session.pkl', 'wb') as f:
    pickle.dump({'cookies': session.cookies, 'headers': session.headers}, f)

加载会话

import pickle
import requests

session = requests.Session()
with open('ig_session.pkl', 'rb') as f:
    session_data = pickle.load(f)
session.cookies.update(session_data['cookies'])
session.headers.update(session_data['headers'])

# 测试会话有效性
response = session.get('https://www.instagram.com/accounts/edit/')
print(response.status_code) # 返回200则会话有效

3. 使用Playwright的上下文存储功能

Playwright的storage_state可以完整保存会话的所有状态(Cookie、本地存储、会话存储),比单独保存Cookie更适配Instagram的验证逻辑:

保存会话

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://instagram.com")
    # 手动完成登录(或用代码模拟登录)
    context.storage_state(path="ig_session.json") # 保存会话到JSON文件
    browser.close()

加载会话

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    # 加载已保存的会话上下文
    context = browser.new_context(storage_state="ig_session.json")
    page = context.new_page()
    page.goto("https://instagram.com")
    # 直接进入登录状态,无需二次验证

关键注意事项

  • IP必须固定:Instagram会绑定会话与IP,测试和爬取阶段必须使用同一个代理IP,禁止频繁切换IP。
  • 模拟真人操作节奏:测试时避免高频请求,每次操作间隔3-5秒,不要批量执行爬取逻辑。
  • 使用老账号:新注册的账号反爬阈值极低,优先使用有正常使用历史的老账号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:47:40