由于selenium从3.141升级到高版本后,查日志的方法不能用了。
改用 seleniumwire 直接获取请求头 request.headers。
例如查找请求头headers中的一个key,‘’Authorization‘’
selenium 低版本中,获取请求头的信息是这样:
from selenium import webdriver
caps = {
'browserName': 'chrome',
'loggingPrefs': {
'browser': 'ALL',
'driver': 'ALL',
'performance': 'ALL',
},
'goog:chromeOptions': {
'perfLoggingPrefs': {
'enableNetwork': True,
},
'w3c': False,
},
}
browser = webdriver.Chrome(desired_capabilities=caps)
inf = browser.get_log('performance') #这次是清空日志
browser.get('http://.....')
inf = browser.get_log('performance') #这次是真的
for i in inf:
dic_info = json.loads(i["message"]) # 把json格式转成字典。
info = dic_info["message"]['params'] # request 信息,在字典的 键 ["message"]['params'] 中。
if 'request' in info: # 如果找到了 request 信息,就终断循环。
if info['request'].get('method')=='POST' and \
info['request'].get('url')=='http://....':
headers = info['request'].get('headers')
if 'Authorization' in headers:
Authorization_str=headers['Authorization']
break
高版本的selenium 中,browser.get_log(‘performance’) 已经不能用了。
改为如下方式:
from seleniumwire import webdriver #pip install selenium-wire
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('http://....') #打开
#获取Authorization_str
Authorization_str=''
for request in browser.requests: #遍历所有 请求
# if request.method == 'POST' and \
# request.url == 'http://....': #找到这个请求
if 'Authorization' in request.headers: #有这个标志
Authorization_str = request.headers['Authorization'] #找到了结果
break
要点:
1、装完selenium后,还得装selenium-wire
from seleniumwire import webdriver #pip install selenium-wire
代替
from selenium import webdriver
2、仅browser 使用 seleniumwire
其他都不变,例如 By、keys等还用selenium
2022.12.21
selenium Ver 4.7.2
selenium-wire Ver 5.1.0 测试成功