Selenium Wire无法访问app.plus500.com的ERR_HTTP2_PROTOCOL_ERROR排查求助
解决Selenium-Wire访问app.plus500.com时的ERR_HTTP2_PROTOCOL_ERROR问题
结合你遇到的现象(TCP RST包、证书链未经过Selenium Wire CA、普通Selenium可正常访问),可以从以下几个方向排查解决:
1. 强制禁用HTTP/2协议
ERR_HTTP2_PROTOCOL_ERROR大概率和Selenium-Wire对HTTP/2的兼容性有关,部分站点对HTTP/2的协议校验非常严格,而Selenium-Wire的MITM层在处理HTTP/2时可能存在漏洞。可以强制浏览器和代理都使用HTTP/1.1:
from seleniumwire import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 禁用Chrome的HTTP/2支持 chrome_options.add_argument('--disable-http2') seleniumwire_options = { # 强制Selenium-Wire使用HTTP/1.1处理请求 'disable_http2': True } driver = webdriver.Chrome(options=chrome_options, seleniumwire_options=seleniumwire_options) driver.get('https://app.plus500.com/')
2. 强制对目标站点启用MITM拦截
从证书链情况来看,Selenium-Wire可能未成功对app.plus500.com进行MITM代理,导致请求处理流程异常。可以配置强制拦截该域名:
seleniumwire_options = { 'mitm_domains': [ 'app.plus500.com', '*.plus500.com' # 包含所有子域名 ], # 若使用mitmproxy后端,强制关闭HTTP/2避免兼容问题 'mitm_http2': False } driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
3. 排除目标站点的MITM代理
如果站点存在严格的MITM检测(通过TCP RST主动断开连接),可以让Selenium-Wire不对该站点做拦截,直接转发请求(代价是无法抓包该站点的流量):
seleniumwire_options = { 'exclude_hosts': [ 'app.plus500.com', '*.plus500.com' ] } driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
4. 调整Chrome的安全与代理参数
尝试关闭Chrome的安全沙箱、禁用QUIC协议等,避免协议冲突:
chrome_options = Options() chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-quic') chrome_options.add_argument('--ignore-certificate-errors-spki-list') # 放宽证书校验限制 driver = webdriver.Chrome(options=chrome_options)
5. 开启详细日志排查
开启Selenium-Wire的DEBUG日志,查看请求过程中的具体错误细节:
seleniumwire_options = { 'logger_level': 'DEBUG' } driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options)
日志会输出代理处理请求的完整流程,帮助定位是协议协商失败、证书问题还是站点主动拒绝连接。
内容的提问来源于stack exchange,提问作者user1330734
相关产品推荐
相关产品推荐

