如何使用 Selenium 在 Edge 浏览器中启用媒体设备访问?
How to enable media device access in Edge browser using Selenium?
我有一个 Selenium 测试,我想在 Edge 中针对使用网络摄像头和麦克风的页面进行 运行。为了让这些媒体设备在浏览器中工作,用户必须允许网站访问该设备。
这是我制作的一个简单示例 fiddle,它说明了 Edge 中的行为:https://jsfiddle.net/12t3nofL/
您应该注意到屏幕底部的弹出栏,我需要在我的自动化中自动允许它。
我已经在 SO 上找到了这些 Q/As,这表明有一种方法可以通过 webdriver 选项允许媒体设备,但它们对我不起作用:
How to enable 'Mircophone' access in Edge browser using Selenium?
这是我的代码(您可能需要先pip install selenium==3.141.0
):
from selenium import webdriver
from selenium.webdriver.edge.options import Options
options = Options()
options.set_capability("dom.webnotifications.enabled", 1)
options.set_capability("permissions.default.microphone", 1)
options.set_capability("permissions.default.camera", 1)
capabilities = options.to_capabilities()
driver = webdriver.Edge(capabilities=capabilities)
driver.get('https://jsfiddle.net/12t3nofL')
而且权限栏每次都会在底部弹出。
我在使用 Selenium 3.141.0 和 Python 3.7.0(尽管在 2.7 中有同样的问题)。
注意:由于其他原因,我将 Edge 设置为在退出时清除会话,因此不会保留 cookie 和缓存 - 试图模仿您通过自动 Chrome.[=15 获得的新配置文件=]
我已经在我的机器上重现了这个问题,但我认为这是一个 Windows 行为,我们不能使用 selenium 进行设置。
从this article可以看出:
如何允许网站在 Microsoft Edge 中浏览时使用您的摄像头或麦克风
您可以在 Microsoft Edge 中将摄像头和麦克风用于网站。但是,即使你的摄像头和麦克风已为 Microsoft Edge 启用,你仍需要向各个网站授予权限,然后它们才能使用你的摄像头和麦克风。方法如下:
- 转到要使用您的麦克风 and/or 摄像头的网站。
- 如果出现对话框询问您是否允许网站使用您的摄像头或麦克风,select允许一次或始终允许,或关闭对话框以阻止访问.
允许权限后,我们可以在管理权限(Edge浏览器设置 => 高级 => 管理权限), 截图如下:
根据你的描述,当Edge浏览器退出时,你会清除会话,cookie和缓存,如果你不想允许,每次都允许,你可以取消选中网站权限选项(如下截图),权限提示只会在我们第一次访问页面时显示。
我找到了一个非常有效的解决方案。我可以将该站点添加到 Edge 在注册表中的媒体设备允许站点列表中,而不是尝试单击按钮以允许媒体设备。然后我几乎可以立即访问需要媒体设备的站点,并且没有弹出窗口。
你要的注册表路径是
HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\MediaCapture\AllowDomains
在我测试的所有 Windows 10 台机器上似乎都是一样的。
您要在此处创建协议的 DWORD 密钥和 IP/FQDN,例如http://10.0.0.2
或 https://example.com
,当您允许域时 Edge 设置的值是 3
,所以我使用它。
在我的特殊情况下,我已切换到 IronPython,因此我可以轻松地连接到 Windows API 调用。这是我的代码片段,可以使这项工作正常进行。
from Microsoft.Win32 import Registry
def add_edge_media_domain(domain):
path = "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\MediaCapture\AllowDomains"
Registry.SetValue(path, domain, 3)
在调用 driver.get(url)
之前,我调用了 add_edge_media_domain(trim_url(url))
,其中 trim_url
只是切断了 URL 的路径部分。
我有一个 Selenium 测试,我想在 Edge 中针对使用网络摄像头和麦克风的页面进行 运行。为了让这些媒体设备在浏览器中工作,用户必须允许网站访问该设备。
这是我制作的一个简单示例 fiddle,它说明了 Edge 中的行为:https://jsfiddle.net/12t3nofL/
您应该注意到屏幕底部的弹出栏,我需要在我的自动化中自动允许它。
我已经在 SO 上找到了这些 Q/As,这表明有一种方法可以通过 webdriver 选项允许媒体设备,但它们对我不起作用:
How to enable 'Mircophone' access in Edge browser using Selenium?
这是我的代码(您可能需要先pip install selenium==3.141.0
):
from selenium import webdriver
from selenium.webdriver.edge.options import Options
options = Options()
options.set_capability("dom.webnotifications.enabled", 1)
options.set_capability("permissions.default.microphone", 1)
options.set_capability("permissions.default.camera", 1)
capabilities = options.to_capabilities()
driver = webdriver.Edge(capabilities=capabilities)
driver.get('https://jsfiddle.net/12t3nofL')
而且权限栏每次都会在底部弹出。
我在使用 Selenium 3.141.0 和 Python 3.7.0(尽管在 2.7 中有同样的问题)。
注意:由于其他原因,我将 Edge 设置为在退出时清除会话,因此不会保留 cookie 和缓存 - 试图模仿您通过自动 Chrome.[=15 获得的新配置文件=]
我已经在我的机器上重现了这个问题,但我认为这是一个 Windows 行为,我们不能使用 selenium 进行设置。
从this article可以看出:
如何允许网站在 Microsoft Edge 中浏览时使用您的摄像头或麦克风
您可以在 Microsoft Edge 中将摄像头和麦克风用于网站。但是,即使你的摄像头和麦克风已为 Microsoft Edge 启用,你仍需要向各个网站授予权限,然后它们才能使用你的摄像头和麦克风。方法如下:
- 转到要使用您的麦克风 and/or 摄像头的网站。
- 如果出现对话框询问您是否允许网站使用您的摄像头或麦克风,select允许一次或始终允许,或关闭对话框以阻止访问.
允许权限后,我们可以在管理权限(Edge浏览器设置 => 高级 => 管理权限), 截图如下:
根据你的描述,当Edge浏览器退出时,你会清除会话,cookie和缓存,如果你不想允许,每次都允许,你可以取消选中网站权限选项(如下截图),权限提示只会在我们第一次访问页面时显示。
我找到了一个非常有效的解决方案。我可以将该站点添加到 Edge 在注册表中的媒体设备允许站点列表中,而不是尝试单击按钮以允许媒体设备。然后我几乎可以立即访问需要媒体设备的站点,并且没有弹出窗口。
你要的注册表路径是
HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\MediaCapture\AllowDomains
在我测试的所有 Windows 10 台机器上似乎都是一样的。
您要在此处创建协议的 DWORD 密钥和 IP/FQDN,例如http://10.0.0.2
或 https://example.com
,当您允许域时 Edge 设置的值是 3
,所以我使用它。
在我的特殊情况下,我已切换到 IronPython,因此我可以轻松地连接到 Windows API 调用。这是我的代码片段,可以使这项工作正常进行。
from Microsoft.Win32 import Registry
def add_edge_media_domain(domain):
path = "HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage\microsoft.microsoftedge_8wekyb3d8bbwe\MicrosoftEdge\MediaCapture\AllowDomains"
Registry.SetValue(path, domain, 3)
在调用 driver.get(url)
之前,我调用了 add_edge_media_domain(trim_url(url))
,其中 trim_url
只是切断了 URL 的路径部分。