无需API使用Selenium爬取Instagram如何避免被重定向到登录页
无登录状态下Selenium爬取Instagram避免重定向到登录页的解决方案
方法1:修改浏览器启动配置隐藏自动化特征
- 启动浏览器时添加无痕模式、禁用自动化标识的启动参数,消除Selenium的默认爬虫特征,避免Instagram直接识别到工具属性:
# Python + ChromeDriver 示例代码 from selenium import webdriver chrome_options = webdriver.ChromeOptions() # 启用无痕模式 chrome_options.add_argument("--incognito") # 移除自动化控制标识 chrome_options.add_argument("--disable-blink-features=AutomationControlled") # 替换为普通桌面端浏览器的User-Agent,不要使用Selenium默认UA chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36") # 排除自动化开关、禁用自动化扩展 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option("useAutomationExtension", False) driver = webdriver.Chrome(options=chrome_options) # 注入JS隐藏navigator.webdriver标识 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" })
方法2:模拟正常用户访问路径
- 不要启动浏览器后直接访问
?__a=1格式的接口链接,先访问Instagram首页停留3-5秒,等待非登录状态下的默认cookie(csrftoken、mid、ig_did等)生成完成后,再跳转目标用户的JSON接口页面,模拟普通用户的访问路径 - 也可以提前在本地浏览器无痕模式下访问Instagram首页,复制出上述3个非登录状态的cookie值,在Selenium启动后手动注入到浏览器中,再发起目标请求,避免Instagram判定为无上下文的恶意访问
方法3:拦截重定向请求
- 借助Selenium的CDP(Chrome DevTools Protocol)接口监听网络响应,当检测到返回302重定向到
/accounts/login/路径时,直接拦截该重定向操作,保留当前页面的请求上下文 - 可以将
pageLoadStrategy配置为eager,在页面资源未完全加载完成时就获取响应内容,跳过重定向逻辑的执行
注意事项
- 控制访问频率:非登录状态下Instagram对单IP的请求限制非常严格,每小时请求次数超过20次大概率会触发强制登录验证,建议单IP下请求间隔设置在30秒以上
- 目前
?__a=1接口的非登录访问权限已经被逐步收缩,高频率访问或者部分新用户页面可能会返回403、空内容,遇到这种情况可以直接解析公开的前端页面元素提取内容,无需调用该接口
内容的提问来源于stack exchange,提问作者Makuza
相关产品推荐
相关产品推荐

