使用Selenium / WebDriver和Python,如何禁止共享我的相机和麦克风的提示?

时间:2014-01-23 14:22:12

标签: python firefox selenium selenium-webdriver

我在Python中使用Selenium来自动化远程浏览器。浏览器需要访问其网络摄像头和麦克风。当我导航到请求访问的页面时,Firefox会显示一个弹出窗口,询问“您想与[主机]分享相机和麦克风吗?”

此窗口不是浏览器页面的一部分,因此无法通过Selenium检测或控制它。

此行为由Firefox的“about:config”页面中的media.navigator.permission.disabled选项控制。如果此选项设置为“true”,则应自动授予对摄像机的访问权限。

当我将该选项设置为“true”时,仅当我手动运行Firefox时才会取消提示。当我通过Selenium运行Firefox时,我仍然得到提示。

如何取消此提示并自动授予权限?

2 个答案:

答案 0 :(得分:0)

问题出在Firefox配置文件中。 Selenium为每个浏览器实例创建一个新的临时配置文件。此配置文件与手动启动Firefox时使用的配置文件分开。

因此,当您在about:config中将media.navigator.permission.disabled设置为'true'时,只对您的配置文件执行此操作,而不是对Selenium使用的配置文件执行此操作。

有两种方法可以解决这个问题:

  1. 告诉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个人资料,其中包含您想要的设置。

  2. 为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)