我在Python中使用Selenium来自动化远程浏览器。浏览器需要访问其网络摄像头和麦克风。当我导航到请求访问的页面时,Firefox会显示一个弹出窗口,询问“您想与[主机]分享相机和麦克风吗?”
此窗口不是浏览器页面的一部分,因此无法通过Selenium检测或控制它。
此行为由Firefox的“about:config”页面中的media.navigator.permission.disabled选项控制。如果此选项设置为“true”,则应自动授予对摄像机的访问权限。
当我将该选项设置为“true”时,仅当我手动运行Firefox时才会取消提示。当我通过Selenium运行Firefox时,我仍然得到提示。
如何取消此提示并自动授予权限?
答案 0 :(得分:0)
问题出在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
这告诉Selenium使用default
个人资料,其中包含您想要的设置。
为Selenium创建和配置新的配置文件以供使用。
在创建浏览器实例之前,您必须创建一个Firefox配置文件并对其进行配置以满足您的需求:
profile = webdriver.FirefoxProfile()
profile.set_preference ('media.navigator.permission.disabled', True)
profile.update_preferences()
然后在创建远程浏览器实例时指定此配置文件:
firefox = selenium.webdriver.remote.webdriver.WebDriver (command_executor=my_url, desired_capabilities=DesiredCapabilities.FIREFOX, browser_profile=profile)
Selenium将使用此配置文件,并且不会提示您访问相机的权限。
请注意,此方法比第一种方法花费的时间更多。
答案 1 :(得分:0)
您可以使用选项:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.set_preference("media.navigator.permission.disabled", True)
browser = webdriver.Firefox(options=options)