在selenium中设置请求标头

tam*_*use 48 webdriver capybara selenium-webdriver

我正在尝试将请求标头"Referer"设置为欺骗来自其他网站的请求.我们需要使用特定引用者的能力测试,它将特定的表单返回给用户,否则给出另一种形式.

我可以通过以下方式在恶作剧中做到这一点:

page.driver.headers = {"Referer" => referer_string}
Run Code Online (Sandbox Code Playgroud)

但我找不到selemium驱动程序的等效功能.

如何在capybara selenium驱动程序中设置请求标头?

And*_*lov 37

Webdriver不包含用于执行此操作的API.有关详细信息,请参阅Selenium跟踪器的问题141.该问题的标题说它是关于响应标头但是决定Selenium在此问题的范围内不包含请求标头的API.有关添加API以设置请求标头的几个问题已标记为重复:第一,第二,第三.

以下是我可以提出的几种可能性:

  1. 使用另一个驱动程序/库而不是selenium
  2. 编写特定于浏览器的插件(或查找现有插件),允许您为请求添加标头.
  3. 使用browsermob-proxy或其他一些代理.

在大多数情况下,我会选择3.这并不难.

请注意,Ghostdriver有一个API,但其他驱动程序不支持它.

  • "我会选择[browsermob-proxy],这并不难." - 对我来说看起来很神秘!从我的角度来看,对于一个非常小的问题来说,它看起来也是一个非常重要的工具. (5认同)

Wil*_*ing 10

对于那些使用Python的人,您可以考虑使用Selenium Wire,它可以设置请求标头,并为您提供检查请求和响应的能力.

from seleniumwire import webdriver  # Import from seleniumwire

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

driver.header_overrides = {
    'Referer': 'referer_string',
}

# All subsequent requests will now contain the Referer
Run Code Online (Sandbox Code Playgroud)

  • 我必须使用“driver._client.set_header_overrides(headers=dict_headers)”来解决我的问题。 (5认同)

Fer*_*ngo 8

我遇到过同样的问题.我解决了它下载modify-headers firefox附加组件并用selenium激活它.

python中的代码如下

fp = webdriver.FirefoxProfile()
path_modify_header = 'C:/xxxxxxx/modify_headers-0.7.1.1-fx.xpi'
fp.add_extension(path_modify_header)

fp.set_preference("modifyheaders.headers.count", 1)
fp.set_preference("modifyheaders.headers.action0", "Add")
fp.set_preference("modifyheaders.headers.name0", "Name_of_header") # Set here the name of the header
fp.set_preference("modifyheaders.headers.value0", "value_of_header") # Set here the value of the header
fp.set_preference("modifyheaders.headers.enabled0", True)
fp.set_preference("modifyheaders.config.active", True)
fp.set_preference("modifyheaders.config.alwaysOn", True)

driver = webdriver.Firefox(firefox_profile=fp)
Run Code Online (Sandbox Code Playgroud)

  • 但是,这不适用于Firefox Quantum(57. +)。 (2认同)