【问题标题】:Accept permission request in chrome using selenium使用 selenium 在 chrome 中接受权限请求
【发布时间】:2014-03-04 22:23:38
【问题描述】:

我有一个带有 google 网络语音 api 的 HTML/Javascript 文件,我正在使用 selenium 进行测试,但是每次我进入该网站时,浏览器都会请求使用我的麦克风的权限,我必须点击“允许”。

如何让 selenium 自动点击允许?

【问题讨论】:

  • 你能用火狐吗?我在 Firefox 中使用这些对话框的经验是,您必须将配置文件设置为默认允许它。截至 1 年前,you could not use a custom chrome profile 我还没有看到任何相反的情况。另外,我尝试设置一个 chrome 配置文件以默认允许使用麦克风,但该菜单对我不起作用。好像是a known error
  • 不幸的是,我必须使用 chrome,因为 google 的网络语音仅适用于 chrome
  • 您能否检查一下是否可以将麦克风的例外添加到您的个人资料中。它不能在我的机器上工作,但也许它会在你的机器上工作。 1. 打开一个新选项卡 2. 在 Chrome 菜单中,单击首选项 3. 单击显示高级设置(如果您不打开该页面,则在设置选项卡中) 4. 单击隐私下的内容设置 5. 向下滚动到媒体然后单击管理例外 6. 从这里您应该能够添加站点并将它们设置为允许麦克风
  • 感谢您的回答,但这对我不起作用
  • 对不起,我没有提供更多帮助。祝你好运。

标签: google-chrome python-2.7 selenium-webdriver


【解决方案1】:

我自己也为此苦苦挣扎。

要避免获得权限提示,最简单的方法是将add --use-fake-ui-for-media-stream 转到您的浏览器开关。

以下是来自@ExperimentsWithCode 答案的一些无耻修改的代码:

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(executable_path="path/to/chromedriver", chrome_options=chrome_options)

【讨论】:

  • 你拯救了我的一天!
【解决方案2】:

@ExperimentsWithCode

再次感谢您的回答,我今天几乎花了一整天的时间试图弄清楚如何做到这一点,我也尝试了您的建议,将标志 --disable-user-media-security 添加到 chrome,不幸的是它没有为我工作。

但是我想到了一个非常简单的解决方案:

要自动单击“允许”,我只需按三下 TAB 键,然后按 Enter。所以我已经编写了自动执行此操作的程序,并且它可以工作!

当我的 html 页面打开时按下的第一个 TAB 将我定向到我的输入框,第二个到地址栏,第三个在 ALLOW 按钮上,然后按下 Enter 按钮。

python 程序使用 selenium 以及 PyWin32 绑定。


感谢您抽出宝贵时间帮助我,非常感谢。

【讨论】:

  • 如果你能给我你的电子邮件,我会给你发一个视频
  • 这很酷。我应该想到的。我以前读过这方面的内容,但我使用的是 Mac,所以 PyWin32 不适合我,而且我还没有找到合适的替代品。不过感谢您的提议!
  • 这个键序列似乎对我不起作用。它仍然对您有用吗?
  • 我已经有 2 年没看到那个项目了。键序列对您不起作用是什么? TAB 键是否错过了允许按钮?它根本不起作用吗?请更准确地说明正在发生的事情。
  • 您好,我知道这已经是很久以前的事了,但是当我试图找到完全相同的问题的解决方法时,就发生了这种情况。我认为用键盘切换是可行的并试了一下,但是,对于我的 Mac 和 Linux 机器上的 Chrome,弹出窗口上的“允许”和“拒绝”无法选择/聚焦。但是,在 Windows 机器上尝试 Chrome 确实有效。只是想知道,你以前在 Chrome Max/Linux 上试过吗?或者碰巧知道那里的技巧?我发现一个可以轻松尝试的弹出站点是digitaltrends.com/computing/best-chrome-themes。谢谢!
【解决方案3】:

所以我遇到了another question,询问有关禁用不同提示框的问题。看来你可能有办法实现你的目标。

This page 列出启动 chrome 的选项。其中一个选项是

--disable-user-media-security

“在访问网络摄像头和麦克风等用户媒体设备时禁用某些安全措施,尤其是在非 HTTPS 页面上”

所以也许这对你有用:

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

chrome_options = Options()
chrome_options.add_argument("--disable-user-media-security=true")

driver = webdriver.Chrome(executable_path="path/to/chromedriver", chrome_options=chrome_options)

【讨论】:

    【解决方案4】:

    注意 Mohana Latha 对 JAVA 的回答! 代码只是按下按钮,从不释放它们。这将在以后带来一堆问题。

    改用这个:

        // opening new window
        Robot robot;
        try {
            robot = new Robot();
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.delay(100);
            robot.keyPress(KeyEvent.VK_N);
            robot.delay(100);
            robot.keyRelease(KeyEvent.VK_N);
            robot.delay(100);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            robot.delay(100);
        } catch (AWTException e) {
            log.error("Failed to press buttons: " + e.getMessage());
        }
    

    【讨论】:

      【解决方案5】:

      以@Shady Programmer 的回答为基础。

      我尝试使用 selenium 发送 Tab 键以专注于弹出窗口,但正如其他人所报告的那样,它在 Linux 中不起作用。因此,我没有使用 selenium 键,而是使用 python 中的xdotool 命令:

      def send_key(winid, key):
          xdotool_args = ['xdotool', 'windowactivate', '--sync', winid, 'key', key]
          subprocess.check_output(xdotool_args)
      

      对于 Firefox,给出以下 近似 序列:

      # Focusing on permissions popup icon
      for i in range(6):
          time.sleep(0.1)
          send_key(win_info['winid'], 'Tab')
      
      # Enter permissions popup
      time.sleep(0.1)
      send_key(win_info['winid'], 'space')
      
      # Focus on "accept" button
      for i in range(3):
          time.sleep(0.1)
          send_key(win_info['winid'], 'Tab')
      
      # Press "accept"            
      send_key(win_info['winid'], 'a')
      

      【讨论】:

        【解决方案6】:

        [Java]:是的,有一种简单的技术可以使用 Robot-java.awt 来点击允许按钮

        public void allowGEOLocationCapture(){
            Robot robot = null;
            try {
                robot = new Robot();
                robot.keyPress(KeyEvent.VK_TAB);
                robot.keyPress(KeyEvent.VK_ENTER);
                robot.delay(600);
            } catch (AWTException e) {
               getLogger().info(e);
            }
         }
        

        【讨论】:

        【解决方案7】:

        您可以允许使用 add_experimental_option,如下所示。

        from selenium.webdriver.chrome.options import Options
        chrome_options = Options()
        chrome_options.add_experimental_option('prefs',{'profile.default_content_setting_values.notifications':1})
        driver = webdriver.Chrome(chrome_options=chrome_options)
        

        【讨论】:

          【解决方案8】:

          做 对于 android chrome,它确实有效!

          adb -s emulator-5554 push <YOU_COMPUTER_PATH_FOLDER>/com.android.chrome_preferences.xml  /data/data/com.android.chrome/shared_prefs/com.android.chrome_preferences.xml
          

          文件配置在这里https://yadi.sk/d/ubAxmWsN5RQ3HA 铬 80 x86

          或者您可以在用手勾选框后保存设置文件,在 adb 中“拉” - 命令

          【讨论】:

            猜你喜欢
            • 2016-01-20
            • 1970-01-01
            • 2012-11-23
            • 2017-04-01
            • 2017-07-06
            • 1970-01-01
            • 1970-01-01
            • 2019-07-07
            • 1970-01-01
            相关资源
            最近更新 更多