更改selenium驱动程序的用户代理

时间:2015-04-28 09:52:23

标签: python selenium http-headers user-agent

我在Python中有以下代码:

from selenium.webdriver import Firefox
from contextlib import closing

with closing(Firefox()) as browser:
  browser.get(url)

我想打印用户代理HTTP标头和 可能会改变它。有可能吗?

4 个答案:

答案 0 :(得分:99)

Selenium无法读取请求或响应标头。您可以通过指示浏览器通过记录此类信息的代理进行连接来实现。

在Firefox中设置用户代理

更改Firefox用户代理的常用方法是在Firefox配置文件中设置变量Date.getSeconds()。请注意,这与Selenium无关。

您可以指示Selenium使用与默认配置文件不同的配置文件,如下所示:

"general.useragent.override"

在Chrome中设置用户代理

使用Chrome,您要执行的操作是使用from selenium import webdriver profile = webdriver.FirefoxProfile() profile.set_preference("general.useragent.override", "whatever you want") driver = webdriver.Firefox(profile) 命令行选项。同样,这不是Selenium的事情。您可以使用user-agent在命令行中调用Chrome,将代理设置为值chrome --user-agent=foo

使用Selenium,你可以这样设置:

foo

上述两种方法都经过测试并发现有效。我不了解其他浏览器。

获取用户代理

Selenium没有从from selenium import webdriver from selenium.webdriver.chrome.options import Options opts = Options() opts.add_argument("user-agent=whatever you want") driver = webdriver.Chrome(chrome_options=opts) 实例查询用户代理的方法。即使在Firefox的情况下,如果未设置为自定义值,也无法通过检查WebDriver是什么来发现默认用户代理。 (在将此设置设置为某个值之前,此设置不存在。)

然而,一旦启动浏览器,您就可以通过执行以下命令获取用户代理:

general.useragent.override

agent = driver.execute_script("return navigator.userAgent") 变量将包含用户代理。

答案 1 :(得分:14)

以路易斯的有用答案为基础......

在PhantomJS中设置用户代理

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
...
caps = DesiredCapabilities.PHANTOMJS
caps["phantomjs.page.settings.userAgent"] = "whatever you want"
driver = webdriver.PhantomJS(desired_capabilities=caps)

唯一的小问题是,与Firefox和Chrome不同,会返回您的自定义设置:

driver.execute_script("return navigator.userAgent")

所以,如果有人在PhantomJS中弄清楚如何做到这一点,请编辑我的答案或在下面添加评论!欢呼声。

答案 2 :(得分:0)

以JJC的有用答案为基础,以路易斯的有用答案为基础......

使用PhantomJS 2.1.1-windows,这条线可以工作:

driver.execute_script("return navigator.userAgent")

如果它不起作用,您仍然可以通过日志获取用户代理(构建在Mma's answer上):

from selenium import webdriver
import json
from fake_useragent import UserAgent

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (UserAgent().random)
driver = webdriver.PhantomJS(executable_path=r"your_path", desired_capabilities=dcap)
har = json.loads(driver.get_log('har')[0]['message']) # get the log
print('user agent: ', har['log']['entries'][0]['request']['headers'][1]['value'])

答案 3 :(得分:0)

这是一种快速更改请求UserAgent的简短解决方案。

使用Chrome更改请求的UserAgent

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Chrome(driver_path)
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent":"python 2.7", "platform":"Windows"})
driver.get('http://amiunique.org')

然后返回您的用户代理:

agent = driver.execute_script("return navigator.userAgent")

某些来源

SeleniumHQ(https://github.com/SeleniumHQ/selenium/blob/11c25d75bd7ed22e6172d6a2a795a1d195fb0875/py/selenium/webdriver/chrome/webdriver.py)的 webdriver.py 源代码通过Chrome Devtools协议扩展了其功能

def execute_cdp_cmd(self, cmd, cmd_args):
        """
        Execute Chrome Devtools Protocol command and get returned result

我们可以使用Chrome Devtools协议查看器列出更多扩展功能(https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setUserAgentOverride)以及要使用的参数类型。