在使用Selenium的Chrome中接受权限请求

6ioyuze2  于 11个月前  发布在  Go
关注(0)|答案(9)|浏览(183)

我有一个HTML/JavaScript文件与谷歌的网络语音API和我做测试使用 selenium ,但每次我进入网站的浏览器请求许可使用我的麦克风,我必须点击“允许”。
如何让selenium自动点击ALLOW?

tnkciper

tnkciper1#

我自己也为此纠结过。
要做到这一点,最简单的方法是避免获得权限提示,即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)

字符串

cgfeq70w

cgfeq70w2#

@ExperimentsWithCode
再次感谢你的回答,我今天花了几乎一整天的时间试图弄清楚如何做到这一点,我也尝试了你的建议,你添加该标志--disable-user-media-security到Chrome,不幸的是,它没有为我工作.
我想到了一个非常简单的解决方案:
要自动点击允许,我所要做的就是按TAB键三次,然后按回车键。所以我写了程序来自动完成,它工作!
当我的html页面打开时,按下的第一个TAB将我引导到输入框,第二个将我引导到地址栏,第三个将我引导到ALLOW按钮,然后按下Enter按钮。
python程序使用selenium和PyWin 32绑定。
谢谢你花时间和试图帮助我,这是非常赞赏。

sqxo8psd

sqxo8psd3#

所以我刚刚碰到another question询问禁用不同的提示框。似乎有一种方法可以让你完成你的目标。
此页面列出了启动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)

vfhzx4xs

vfhzx4xs4#

小心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());
    }

字符串

ma8fv8wu

ma8fv8wu5#

基于@Shady Programmer的答案。
我尝试使用selenium发送Tab密钥,以便专注于弹出窗口,但正如其他人所报告的那样,它在Linux中不起作用。因此,我使用python中的xdotool命令,而不是使用selenium密钥:

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')

gmxoilav

gmxoilav6#

[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);
    }
 }

字符串

u59ebvdq

u59ebvdq7#

您可以允许使用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)

字符串

ippsafx7

ippsafx78#

对于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 Chrome 80 x86
或者你可以保存设置文件后,勾选框与你的手,在adb的“拉”-命令

zrfyljdw

zrfyljdw9#

感谢@sokkyoku,我尝试了很多方法来允许我的相机权限使用selenium和node.js,但我在其他地方找不到任何答案。
对于那些像我一样使用selenium和JavaScript的人来说,这里是@sokkyoku提供的等效代码:

const chrome = require ("selenium-webdriver/chrome");
const chromeOptions= new chrome.Options();
chromeOptions.addArguments('--use-fake-ui-for-media-stream');

driver = await new Builder().forBrowser("chrome").setChromeOptions(chromeOptions).usingServer("").build();

字符串
如果你没有使用selenium grid,你可以忽略.usingServer(“”)部分,这样就可以了!

相关问题