当前位置: 首页 > 知识库问答 >
问题:

如何在运行时更改远程Selenium驱动程序的用户代理?

贲高寒
2023-03-14

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

from selenium.webdriver import Chrome, Remote
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


url = "http://selenium-hub:4444/wd/hub"
driver = Remote(url, desired_capabilities=DesiredCapabilities.CHROME)
options = Options()
options.add_argument(f"user-agent={my_user_agent}")
driver = Chrome(options=options)
# also working for remote
# driver = Remote(url, desired_capabilities=DesiredCapabilities.CHROME, options=options)

共有1个答案

司空和悌
2023-03-14

找到办法了。您不需要将Selenium hub的url作为第一个参数(command_executor),而是需要将其封装在ChromeRemoteConnection中,如下所示:

from selenium.webdriver.chrome.remote_connection import ChromeRemoteConnection

driver = Remote(
    ChromeRemoteConnection(remote_server_addr=url),
    desired_capabilities=DesiredCapabilities.CHROME
)

在此之后,可以对用户代理进行二次变更;但是,不需要调用execute_cdp_cmd(Remote没有这个函数,导致AttributeError)而是可以安全地执行代码的内部行。

cmd = "Network.setUserAgentOverride"
ua = "My brand new user agent!"
cmd_args = dict(userAgent=ua)

driver.execute("executeCdpCommand", {"cmd": cmd, "params": cmd_args})
assert ua == driver.execute_script("return navigator.userAgent;")
 类似资料:
  • 问题内容: 我在以下代码中: 我想打印用户代理HTTP标头,并可能对其进行更改。可能吗? 问题答案: Selenium中无法读取请求或响应头。您可以通过指示浏览器通过记录此类信息的代理进行连接来实现。 在Firefox中设置用户代理 更改Firefox用户代理的通常方法是在Firefox配置文件中设置变量。请注意,这与硒无关。 您可以指示Selenium使用与默认配置文件不同的配置文件,如下所示:

  • 问题内容: 我使用Selenium 2.35.0并配置代理设置,例如: 当我需要更改代理设置时,我会强制重新启动Webdriver并指定其他“ proxyStr”。 如何在不重新启动Webdriver的情况下实现此更改? 问题答案: 为任何给定的驱动程序设置代理时,仅在创建WebDriver会话时设置代理;它不能在运行时更改。即使您具有创建的会话的功能,也将无法更改它。因此,答案是,不,如果要使用

  • 我使用Selenium 2.35.0并配置代理设置,如: 当我需要更改代理设置时,我强制重新启动webdriver并指定其他“proxyStr”。 我如何能达到这一变化没有WebDrive重启?

  • 我有20个页面,每个页面有2个测试用例,每个测试用例下载一些文件。我想在运行时为每个测试用例更改下载目录。 这里是“TestBaseClass”代码,它下载一个特定文件夹中的所有文件,我必须将它们按类别分开,并将它们放入一个特定文件夹。有20个文件夹,每个文件夹有2个子文件夹'ChapterLevel'和'PracticeLevel',我必须手动放置它。 是否可以通过在运行时传递变量来更改下载目录

  • 我试图在远程节点上运行selenium网格代码,但它总是引发异常。 集线器: 它会听192.168.1.106:4444 节点: 它将在192.168.1.132:5566收听 Java代码: 节点日志: 操作系统:Fedora 23,Firefox版本50.1.0,selenium独立服务器3.0.1

  • 问题内容: 我正在尝试运行一个ruby文件,该文件将使用seleniumwebdriver启动chrome驱动程序。我有selenium独立服务器2.35.0。和chromedriver可执行文件已安装。我正在通过运行服务器来启动 两个会话正在启动,chrome驱动程序无法启动。 这是在我使用以下文件运行文件之后 我对此并不陌生,无法找出问题所在。而且,我也试图让它无头运行,所以我正在运行Xvfb