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
相关产品推荐
相关产品推荐

