Mar*_*hio 5 python firefox selenium selenium-webdriver
我正在 Python 中使用 Selenium 来自动化远程浏览器。浏览器需要访问其网络摄像头和麦克风。当我导航到请求访问的页面时,Firefox 会显示一个弹出窗口,询问“您想与 [主机] 共享您的摄像头和麦克风吗?”
该窗口不是浏览器页面的一部分,因此无法通过 Selenium 检测或控制。
此行为由 Firefox 的“about:config”页面中的 media.navigator.permission.disabled 选项控制。如果此选项设置为“true”,则应自动授予对相机的访问权限。
当我将该选项设置为“true”时,仅当我手动运行 Firefox 时才会消除提示。当我通过 Selenium 运行 Firefox 时,我仍然收到提示。
如何抑制此提示并自动授予权限?
问题出在 Firefox 配置文件中。Selenium 为每个浏览器实例创建一个新的临时配置文件。此配置文件与您手动启动 Firefox 时使用的配置文件是分开的。
因此,当您在 about:config 中将 media.navigator.permission.disabled 设置为“true”时,您仅针对您的配置文件执行此操作,而不是针对 Selenium 使用的配置文件。
有两种方法可以解决这个问题:
告诉 Selenium 使用哪个现有配置文件。
为此,您必须首先确定您正在使用哪个配置文件。为此,请关闭 Firefox 的所有实例,然后执行firefox -p以启动配置文件管理器。在大多数情况下,您会看到一个名为 的配置文件default。
使用此配置文件,导航至about:config,并将media.navigator.permission.disabled选项设置为true。
然后,当您启动 Selenium 独立服务器时,指定此配置文件:
java -jar selenium-server-standalone-2.37.0.jar -Dwebdriver.firefox.profile=default
Run Code Online (Sandbox Code Playgroud)
这告诉 Selenium 使用default配置文件,其中包含您想要的设置。
创建并配置一个新的配置文件以供 Selenium 使用。
在创建浏览器实例之前,您必须创建 Firefox 配置文件并对其进行配置以满足您的需求:
profile = webdriver.FirefoxProfile()
profile.set_preference ('media.navigator.permission.disabled', True)
profile.update_preferences()
Run Code Online (Sandbox Code Playgroud)
然后在创建远程浏览器实例时指定此配置文件:
firefox = selenium.webdriver.remote.webdriver.WebDriver (command_executor=my_url, desired_capabilities=DesiredCapabilities.FIREFOX, browser_profile=profile)
Run Code Online (Sandbox Code Playgroud)
然后 Selenium 将使用此配置文件,并且不会提示您授予访问相机的权限。
请注意,此方法比第一种方法花费更多时间。
| 归档时间: |
|
| 查看次数: |
7059 次 |
| 最近记录: |