Мих*_*мин 8 python selenium selenium-chromedriver
我无法找到如何在 selenium chrome webdriver (python) 中设置请求标头。我需要设置“主机”标头。我尝试过:
from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver import DesiredCapabilities
url = 'http://localhost:888/test'
display = Display(visible=0, size=(800, 800))
display.start()
desired_capabilities = DesiredCapabilities.CHROME.copy()
desired_capabilities['chrome.page.customHeaders.host'] = 'test.local'
driver = webdriver.Chrome('/tmp/chromedriver',
desired_capabilities=desired_capabilities)
driver.get(url)
Run Code Online (Sandbox Code Playgroud)
结果:
GET /test HTTP/1.1
Host: localhost:888
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Run Code Online (Sandbox Code Playgroud)
所以,我期望标题host:test.local
但发现Host: localhost:888
我做错了什么?我找不到如何使用 Chrome webdriver 设置标头:(
pbu*_*uck -1
Host
请求标头中是服务器(目的地)的名称,这是由您的driver.get(url)
.
Host
请求标头是使用 nodejs 从 serverUrl 构造的url.parse(serverUrl)
。因此,您无法将主机标头设置为“b”的请求发送到服务器“a”。
这意味着如果您的服务器托管在本地计算机上,您(可能)可以通过以下方式访问它http://localhost:888/test
,在这种情况下,您的标头将包括:
GET /test HTTP/1.1
Host: localhost:888
Run Code Online (Sandbox Code Playgroud)
或访问它http://127.0.0.1:888/
导致
GET /test HTTP/1.1
Host: 127.0.0.1:888
Run Code Online (Sandbox Code Playgroud)
或者访问它http://Johns-iMac.local:888/test
...假设您使用的 iMac 主机名为“Johns-iMac.local”:
GET /test HTTP/1.1
Host: Johns-iMac.local:888
Run Code Online (Sandbox Code Playgroud)
或者使用您的网络接口 IP 地址访问它,也许http://192.168.1.5:888/test
:
GET /test HTTP/1.1
Host: 192.168.1.5:888
Run Code Online (Sandbox Code Playgroud)
这是您的解决方案的关键:您需要使用 URL 访问它http://test.local:888/test
。
因此,您想要做的是修改 DNS,以便您的计算机认为主机test.local
具有 IP 地址127.0.0.1
(或您喜欢的任何地址)。
执行此操作取决于您的操作系统,但通常只需在文件末尾添加一行即可/etc/hosts
:
test.local 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
(您可能需要重新启动)。
从现在开始,所有请求都test.local
将发送到服务器,127.0.0.1
并http://test.local:888/test
为您提供请求标头:
GET /test HTTP/1.1
Host: test.local:888
Run Code Online (Sandbox Code Playgroud)