在 Chrome 中使用 Pepper/PPAPI Flash 时,如何绕过 "Flash Camera and Microphone Access" 弹出窗口(通过 Selenium)?

How do I bypass the "Flash Camera and Microphone Access" pop-up when using Pepper/PPAPI Flash in Chrome (via Selenium)?

Chrome 支持两种风格的 Flash:NPAPI 和 PPAPI (Pepper)。这两种实现似乎以不同方式处理相机和麦克风权限。具体来说,PPAPI (Pepper) 似乎没有兑现任何先前授予的许可。

使用默认的 NPAPI,当我第一次导航到请求使用计算机摄像头和麦克风权限的 Flash 站点时,Adobe Flash 弹出窗口询问用户允许或拒绝访问。我允许访问,并记住此授权。下次我导航到该站点时,会自动授予权限,不会弹出窗口。

当我想使用 PPAPI (Pepper) Flash 进行测试时,我将“--enable-bundled-ppapi-flash”和“--disable-npapi”命令行参数指定给 Chrome。在这种模式下,忽略之前的授权,每次都显示弹窗。我还没有弄清楚如何在 Selenium 中检测到它并单击 "Allow"。

有谁知道如何绕过这个弹出窗口,点击 "Allow" 或完全禁用它?

谢谢。

更新: 我发现非 Pepper Flash 将 camera/microphone 权限存储在名为 'settings.sol' 的文件中,存储在该站点特定的目录中请求访问。例如,在 Windows 上,当 1.2.3.4 的主机请求访问时,将创建以下文件:

C:\Users[用户]\AppData\Roaming\Macromedia\Flash Player\macromedia.com\support\flashplayer\sys#1.2.3.4\settings.sol

注意 "Flash Player" 中的 space。该文件是一个本地共享对象,编码为 AMF。我使用 Python pyamf 包创建一个文件,授予对站点的永久访问权限:

from pyamf import sol

permissions = sol.SOL ('1.2.3.4/settings')
permissions[u'always'] = True
permissions[u'allow'] = True
permissions[u'klimit'] = 100
sol.save (permissions, 'my-settings.sol')

当我将其复制到适当的目录时,自动授予访问权限。但是同样,这对 Pepper Flash 不起作用。

Pepper Flash 忽略此目录,而是为 Chrome 的每个实例获取一个新的临时目录:

C:\Users[用户]\AppData\Local\Temp\scoped_dir5976_6686\Default\Pepper Data\Shockwave Flash\WritableRoot#SharedObje ctsDMDJWLP\macromedia.com\support\flashplayer\sys#1.2.3.4\settings.sol

不幸的是,目录在每次调用时都会发生变化。如果我能以某种方式发现这个目录的名称,那么我就可以在请求访问之前上传文件。

但是我不知道如何发现这个目录的名称。

事实证明,我的问题是特定于 Selenium 的,以及我是如何使用 Selenium 的。

首先,回到NPAPI Flash,它将对Windows的权限存储在用户目录下的一个子目录中;例如:

C:\Users[user]\AppData\Roaming\Macromedia\Flash  Player\macromedia.com\support\flashplayer\sys

Pepper Flash 不使用此目录的权限,因此不遵守存储在那里的设置。相反,它将其权限文件存储在 Chrome 用户数据目录下的子目录中。

当我通过 Selenium 创建 Chrome 浏览器实例时,为会话创建了一个临时用户数据目录例如:

C:\Users[user]\AppData\Local\Temp\scoped_dir5976_6686

Pepper Flash 将其权限文件存储在该目录下,但是当浏览器会话结束时,该临时目录被删除,设置被遗忘。

解决方案很简单:通过 Selenium 启动 Chrome 时,通过命令行参数指定 Chrome 用户的数据目录:

"user-data-dir=C:\Users\[user]\AppData\Local\Google\Chrome\User Data"

Pepper Flash 然后将其权限存储在此目录中,并且由于它是一个永久目录,不会在浏览器会话结束时被删除,因此下一个实例将在那里,因此授予的权限将是记住了。

在 linux 上,目录似乎取决于应用程序。铬浏览器似乎将它们存储在

~/.config/chromium/Default/Pepper Data

Qt WebEngine 程序似乎将它们存储在

~/.local/share/[NAMEOFTHEAPPLICATION]/QtWebEngine/Default/Pepper Data

我需要删除目录以收回访问网络摄像头的永久权限(我已将其提供给网站进行测试)。