Python URL重定向失效及Selenium会话复用问题求助
解决方案
一、修复requests重定向未触发的问题
requests只处理HTTP协议级别的重定向(即3xx状态码+Location头),如果返回200但没跳转,大概率是网站用了JS跳转或meta标签跳转,或者UA被拦截,按下面的方法排查:
- 先检查响应头和内容:
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } resp = requests.get(ad_link, headers=headers, allow_redirects=True) print(resp.headers) # 查看是否存在Location字段 print(resp.text[:500]) # 查看是否有meta跳转标签(比如<meta http-equiv="refresh" content="0;url=xxx">) - 如果是meta/JS跳转,用
requests-html渲染页面自动处理:from requests_html import HTMLSession session = HTMLSession() resp = session.get(ad_link, headers=headers) resp.html.render() # 执行页面JS,自动完成跳转 print("最终跳转URL:", resp.url) - 若确实是HTTP重定向但状态码异常,手动提取
Location头发起请求:if 'Location' in resp.headers: final_resp = session.get(resp.headers['Location'], headers=headers)
二、实现Selenium复用登录会话
方法1:复用本地Chrome用户数据(最简单)
直接调用你本地已登录的Chrome配置文件,无需重新登录:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # Windows路径示例,Linux/macOS请替换为对应路径(比如~/.config/google-chrome/Default) chrome_options.add_argument(r"--user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data") chrome_options.add_argument(r"--profile-directory=Default") # 启动前必须关闭所有Chrome窗口,否则会报错 driver = webdriver.Chrome(options=chrome_options) driver.get(ad_link) # 直接用已登录会话打开链接
方法2:手动传递登录Cookies
如果不想用本地用户数据,可以先通过requests登录拿到Cookies,再导入Selenium:
- 先用requests完成登录:
import requests login_session = requests.Session() login_url = "目标网站的登录接口" login_payload = {"username": "你的账号", "password": "你的密码"} # 模拟登录(注意有些网站需要验证码或CSRF token,需额外处理) login_session.post(login_url, data=login_payload)
- 导入Cookies到Selenium:
driver = webdriver.Chrome() # 先打开目标网站的任意页面(确保域名一致,否则Cookies无法生效) driver.get("目标网站的首页") # 逐个添加Cookies for cookie in login_session.cookies: driver.add_cookie({ "name": cookie.name, "value": cookie.value, "domain": cookie.domain, "path": cookie.path, "expiry": cookie.expires }) # 刷新后打开目标链接,此时已处于登录状态 driver.refresh() driver.get(ad_link)
三、一站式解决:重定向+会话复用
如果requests搞不定JS/meta跳转,直接用Selenium的本地用户数据方案最省心:
- 手动打开Chrome,登录目标网站,完成后关闭所有Chrome窗口;
- 运行上面的Selenium代码,打开ad_link时会自动处理所有类型的重定向,同时复用已登录会话。
关于循环不执行的问题:先确认重定向是否生效(比如打印最终URL),再调整循环触发条件——比如判断resp.url是否和初始ad_link不同,或者检查响应内容里的跳转标识。
内容的提问来源于stack exchange,提问作者testttt
相关产品推荐
相关产品推荐

