tips:这个只是 selenium-wire 的简单说明
测试环境原先是提供 host 方式来切换不同版本的测试环境,现在改成代理 + 不同请求头(nohost)来路由不同版本的测试环境。
自动化框架也需要进行对应修改,原版的 selenium/webdriver 支持代理,但不支持修改请求头。而通过 +fiddler/mitmproxy 的方式感觉过于小题大做了。
google 到 selenium-wire,能解决这个问题。安装(>python3.6):
pip install selenium-wire
from seleniumwire import webdriver
wireOptions={
'proxy': {
'http': 'http://'+myProxy,
'https': 'https://'+myProxy,
'no_proxy': 'localhost,127.0.0.1'
}
}
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(executable_path=ChromeDriverPath,options=chrome_options,seleniumwire_options=wireOptions)
driver.header_overrides=[
('.*xxx.xxx.com.*', {"ENV-ID":"1"})
]
driver.header_overrides={
"ENV-ID":"1",
"Proxy-Client-Ip":"67.220.90.13"
}
def interceptor(request):
if request.host=='xxx.xxx.com':
if request.headers.get('ENV-ID'):
del request.headers['ENV-ID']
request.headers['ENV-ID'] = '1'
driver.request_interceptor = interceptor
del driver.request_interceptor
del driver.header_overrides
def interceptor(request:Request):
p=re.compile(".*(pro6e.com|riskified|google|doubleclick|snapengage.com|taboola|hubapi|hubspot|facebook|hs-scripts.com).*")
if p.findall(request.host):
request.abort()
driver.request_interceptor = interceptor