当前位置: 首页 > 面试题库 >

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

曾泳
2023-03-14
问题内容

我在以下代码Python

from selenium.webdriver import Firefox
from contextlib import closing

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

我想打印用户代理HTTP标头,并可能对其进行更改。可能吗?


问题答案:

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

在Firefox中设置用户代理

更改Firefox用户代理的通常方法是"general.useragent.override"在Firefox配置文件中设置变量。请注意,这与硒无关。

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

from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "whatever you want")
driver = webdriver.Firefox(profile)

在Chrome中设置用户代理

对于Chrome,您要做的就是使用user-agent命令行选项。再次,这不是硒的事情。您可以在命令行中使用调用Chrome,chrome --user-agent=foo以将代理设置为value 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)

以上两种方法都经过测试,发现可以使用。我不了解其他浏览器。

获取用户代理

Selenium没有方法可从的实例查询用户代理WebDriver。即使是Firefox,也无法通过检查general.useragent.override未设置为自定义值的内容来发现默认用户代理。(此设置在设置为某个值之前不
存在 。)

但是,一旦启动浏览器,您可以通过执行以下操作获取用户代理:

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

agent变量将包含用户代理。



 类似资料:
  • 按照标题,我有一个远程selenium驱动程序(带有Chrome功能),我需要改变它的用户代理,而不需要创建另一个驱动程序。

  • 在Splinter/Selenium的旧版本中,这被认为是不可能的。几年后,这个答案声称用JavaScript是可能的,但是这个代码对我不起作用(我可能只是没有把它翻译成Python)。这个答案关闭浏览器,然后重新打开它,我需要窗口/浏览器保持打开。 对于像FoxyProxy这样的插件,动态地更改代理非常容易,但是我认为Selenium不能与插件交互,因为它们是页面元素? 由于Splinter被设

  • 我正试图在eclipse中运行我的第一个webdriver脚本。使用jre1。8.0_1111. 我使用了下面的代码,但它显示了错误。请帮我查一下密码。 错误堆栈 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关更多信息,请参阅github。com/mozilla/geckodr

  • 我试图通过网络驱动程序在“http://www.kayak.co.in/?ispredir=true”中选择入住和退房时间。无法选择任何日期。请帮帮我。

  • 以下是我得到的例外情况: 失败:goToPortal java.lang.nullPointerException(位于org.openqa.selenium.support.pageFactor.defaultelementLocator.findElement(defaultelementLocator.java:69)(位于org.openqa.selenium.support.pageFa

  • 我是SeleniumWebDriver的新手。我写这段代码是为了理解导航命令,但是一旦浏览器打开,就会显示一个登录弹出窗口。我试图使用类名或xpath关闭它,但出现超时异常。 在这种情况下,我需要使用显式等待吗?你能帮我找出问题所在吗? } 例外情况: [43.366][SEVERE]:超时接收来自渲染器的消息: 37.150[43.373][SEVERE]:超时接收来自渲染器的消息:-0.007