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

Selenium中driver.get()自动跳转HTTPS,手动修改正常的问题求助

问题分析与解决方案

行为差异原因

导致driver.get()与手动修改地址栏行为不同的核心原因在于Chrome安全策略的执行逻辑差异:

  • HSTS缓存与自动HTTPS升级:Chrome会缓存网站的HSTS(HTTP严格传输安全)规则,或通过内置的HTTPS升级列表强制将HTTP请求转为HTTPS。driver.get()通过Chrome DevTools Protocol(CDP)发起导航,会严格遵循这些安全策略直接触发重定向;而手动修改地址栏属于用户交互操作,浏览器会提供临时绕过选项(如显示警告后允许访问HTTP版本),不会强制重定向。
  • 导航触发机制优先级:自动化导航(driver.get())优先执行浏览器安全策略,无人工干预空间;用户手动输入地址时,浏览器会将用户意图放在更高优先级,允许覆盖自动跳转规则。

解决方法

要让Selenium在无头模式下正常访问HTTP网站,需通过启动参数和CDP命令禁用Chrome的HTTPS强制跳转功能:

1. 添加Chrome启动参数

from selenium import webdriver
options = webdriver.ChromeOptions()

# 禁用HSTS,避免强制HTTPS跳转
options.add_argument('--disable-hsts')
# 禁用HTTP/2,消除相关HTTPS升级逻辑
options.add_argument('--disable-http2')
# 允许加载不安全的HTTP内容
options.add_argument('--allow-running-insecure-content')
# 将目标HTTP域名标记为安全,规避自动升级
options.add_argument('--unsafely-treat-insecure-origin-as-secure="http://your-target-domain.com"')
# 使用全新用户数据目录,避免加载已有HSTS缓存
options.add_argument('--user-data-dir=/tmp/selenium-empty-profile')
options.add_argument('--no-first-run')
options.add_argument('--no-default-browser-check')

driver = webdriver.Chrome(options=options)

2. 通过CDP命令强化配置

启动浏览器后,执行CDP命令进一步禁用安全限制:

# 忽略证书错误(针对HTTPS故障的网站)
driver.execute_cdp_cmd('Security.setIgnoreCertificateErrors', {'ignore': True})
# 禁用HTTP/2协议
driver.execute_cdp_cmd('Network.setHTTP2Enabled', {'enabled': False})
# 禁用自动HTTPS升级
driver.execute_cdp_cmd('Security.setAutoUpgradeMixedContent', {'enabled': False})

3. 验证效果

完成上述配置后,调用driver.get("http://your-target-domain.com")即可直接发起HTTP请求,无需手动修改地址栏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:34:52