【问题标题】:How do I allow Chrome to use my microphone programmatically?如何允许 Chrome 以编程方式使用我的麦克风?
【发布时间】:2016-08-08 15:10:49
【问题描述】:

我目前正在尝试运行一些使用 webdriverjs 和 chromedriver 进行的测试,但它们需要麦克风权限。

这是显示的弹出窗口:

我试过了:

    chromedriver.start(['--disable-popup-blocking']);
    driver = new Webdriver.Builder()
    .withCapabilities(Webdriver.Capabilities.chrome())
    .build();

但是没有用。

我也试过

    driver.wait(Until.alertIsPresent(), config.TIMEOUT, 'Alert did not show up');
    driver.switchTo().alert().accept();

它也没有工作!我猜这不是普通的警报。

有用的链接:

Chrome startup arguments list

Chrome options for java and ruby

Chromedriver github

如何以编程方式授予他们权限?

是否有任何标志或其他方式解决这个问题?

【问题讨论】:

  • 这是安全问题,谷歌浏览器很可能不允许规避它。在https: 页面上,您只需授予一次权限。
  • pffff,谢谢你的提示。
  • @AlexKudryashev,事实上,Chrome 已经禁止访问非 SSL 域上的 userMedia、麦克风、geoLocation 和大多数 API。 localhost 被视为安全域(出于开发目的)。
  • 那么它应该停止请求麦克风权限... xD
  • 检查网站设置(地址栏左侧的锁定图标)screenshot

标签: javascript google-chrome selenium-webdriver selenium-chromedriver ruby-mocha


【解决方案1】:

有点晚了,但在这里为其他寻找相同的人粘贴如何执行此操作。

const webdriver = require('selenium-webdriver'), By = webdriver.By, until = webdriver.until,Builder= webdriver.Builder;

var chrome = require('selenium-webdriver/chrome');

var chromeOptions = new chrome.Options()
.addArguments('allow-file-access-from-files')
.addArguments('use-fake-device-for-media-stream')
.addArguments('use-fake-ui-for-media-stream');

var driver = new webdriver.Builder()
.forBrowser('chrome')
.setChromeOptions(chromeOptions);

driver = driver.build();

【讨论】:

  • 谢谢 - 只需 'use-fake-ui-for-media-stream' 就足以解决我的麦克风权限问题。
  • 太棒了!也在 Java Selenium 中工作过:ChromeOptions options = new ChromeOptions(); options.addArguments("use-fake-device-for-media-stream"); options.addArguments("use-fake-ui-for-media-stream"); driver = new ChromeDriver(options);
【解决方案2】:

每次运行 selenium 时都会加载新的配置文件,因此您对首选项和网站权限所做的更改不会在会话之间保留。要修改这一点,我们需要告诉 selenium 要加载哪个配置文件。

第 1 步。找到您的 Chrome 首选项文件:www.forensicswiki.org/wiki/Google_Chrome#Configuration

第 2 步。将文件夹 Default 复制到某处。我假设它被复制到/some/path/allow-mic/Default

替代步骤 3(这更容易): 在复制 Default 之前,请使用 Chrome 访问 localhost:1337 并将麦克风设置为始终允许。

步骤 3. 编辑allow-mic/Default/Preferences,找到标签"profile""content_settings""exceptions"并添加

"media_stream_mic":{"http://localhost:1337,*":
                                          {"last_used":1470931206,
                                           "setting":1} },

"exceptions"。你应该得到类似的结果:

...
"profile":{
     ...
     "content_settings": {
         ...
         "exceptions": {
             ...
             "media_stream_mic":{"http://localhost:1337,*":
                                      {"last_used":1470931206,
                                       "setting":1} },
             ...
         },
    },
},
...

第 4 步: 配置selenium 以使用编辑的首选项:

var chromedriver = require('chromedriver');
var Webdriver = require('selenium-webdriver');
var chrome = require('selenium-webdriver/chrome');

var opts = new chrome.Options();                   
opts.addArguments("user-data-dir=/some/path/allow-camera");

var driver = new chrome.Driver(opts);

您可以通过打开 chrome://version/ 检查是否使用了正确的首选项集(配置文件路径)。

【讨论】:

  • 看起来不错,我稍后会试试这个。不过,我必须在 webdriverjs 中找到 ChromeOptions。
  • 我无法使用这个技巧。我设置了一个文件夹的路径,该文件夹的首选项文件具有以下设置:"media_stream_mic":{"localhost:1337,":{"last_used":1473864155.757848,"setting":1},"@987654323 @,":{"last_used":1470767319.186194,"setting":1},...} 当我运行 selenium 时,它仍然要求麦克风权限。
  • 您能否尝试在您的网址中添加“http://...,*”,以便它们与答案中的网址匹配?您是否尝试过使用替代步骤 3?您是否检查了 chrome://version 以确认您使用了正确的首选项集?
【解决方案3】:

对于那些使用 Python 的人来说,这对我有用:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--use-fake-ui-for-media-stream")
driver = webdriver.Chrome(chrome_options=chrome_options)

【讨论】:

    【解决方案4】:

    您可以通过向 chromedriver 提供 hardware.audio_capture_allowed_urls 首选项,将音频捕获的 url 列入白名单。

    ...
    chrome_options = Options()
    prefs = {"hardware.audio_capture_allowed_urls" : ["example.org"]}
    chrome_options.add_experimental_option("prefs",prefs)
    driver = webdriver.Chrome(chrome_options=chrome_options)
    

    【讨论】:

      【解决方案5】:

      同样,用于Splinter

          from splinter import Browser
          from selenium.webdriver.chrome.options import Options 
          chrome_options = Options() 
          chrome_options.add_argument("--use-fake-ui-for-media-stream") 
          Browser('chrome', ** {'executable_path':'chromedriver'},options=chrome_options)
      

      【讨论】:

        【解决方案6】:

        如果你想使用麦克风,

        chrome_options = Options()
        
        chrome_options.add_experimental_option('prefs',{'profile.default_content_setting_values.media_stream_mic':1})
        
        
        driver = webdriver.Chrome(path,chrome_options=chrome_options)
        

        【讨论】:

        • 在您的代码中添加一些描述,这将有助于更好地理解。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-02
        • 1970-01-01
        • 2023-03-29
        • 2012-01-16
        相关资源
        最近更新 更多