selenium4 请求chrome 如何添加header请求头
前言
- selenium的webdriver本身没有api能做这个事情,详见issue。
- 国内的博客全抄来抄去,说selenium直接加add_argument参数就好了,弄得找了好几天找代码问题,上外网查秒解决。所以要学好计算机还是得英文呐~~
- 我用requests登录后,获取到了认证信息,但是接下来的请求我不再使用requests,而是需要用Chrome或Firefox浏览器进行操作,页面中认证信息不是加在Cookie中,而是加在header的Security中(名称为Authorization),Selenium是不可以添加的,查询到Selenium-wire可以,具体用法如下:
解决
1. 安装selenumwire库
pip3 install selenium-wire
2.具体代码:
from seleniumwire import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless')#适用于 linux系统的 浏览器无gui模式的: 无头模式 chrome_options.add_argument('--disable-gpu') chrome_options.add_argument("no-sandbox") chrome_options.add_argument("--disable-extensions") driver = webdriver.Chrome(chrome_options=chrome_options) driver.header_overrides = {"tmp": "tomjobs"} driver.get("https://httpbin.org/headers") # 可以看到请求的header头 print(driver.page_source) #打印页面得所有资源
for request in self.driver.requests:
print("请求头header信息:")
print(request.headers)
break #只打印一次即可
3.尝试了一下,不添加这些argument依然可以成功添加请求头:
# Enable selenium download function chrome_options = webdriver.ChromeOptions() if platform.system() == "Linux": chrome_options.add_argument("--headless") #无头模式 try: service = Service(executable_path=ChromeDriverManager().install())#只有第一次执行能成功,如果不存在就安装,如果已经安装就捕获异常:不需要再安装了 except: service = Service() env_dist = os.environ self.header1= "test2" self.header2= "test2" try: self.header1= env_dist["test1"] self.header2= env_dist["test2"] print("header1= %s, header2= %s " % (self.header1, self.header2)) except: pass self.driver = webdriver.Chrome(service=service, options=chrome_options) self.driver.header_overrides = {"header1": self.header1, "header2": self.header2} for request in self.driver.requests: print("请求头header信息:") print(request.headers) break #只打印一次即可
参考 : https://blog.csdn.net/tomjobs/article/details/128277383