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

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:

  1. 先用requests完成登录:
import requests

login_session = requests.Session()
login_url = "目标网站的登录接口"
login_payload = {"username": "你的账号", "password": "你的密码"}
# 模拟登录(注意有些网站需要验证码或CSRF token,需额外处理)
login_session.post(login_url, data=login_payload)
  1. 导入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的本地用户数据方案最省心:

  1. 手动打开Chrome,登录目标网站,完成后关闭所有Chrome窗口;
  2. 运行上面的Selenium代码,打开ad_link时会自动处理所有类型的重定向,同时复用已登录会话。

关于循环不执行的问题:先确认重定向是否生效(比如打印最终URL),再调整循环触发条件——比如判断resp.url是否和初始ad_link不同,或者检查响应内容里的跳转标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:25:27