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

时间:2015-05-11 17:40:35

标签: google-chrome flash selenium

Chrome支持两种Flash:NPAPI和PPAPI(Pepper)。这两种实现似乎以不同方式处理摄像头和麦克风权限。具体而言,PPAPI(胡椒)似乎不遵守任何先前的许可。

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

当我想用PPAPI(Pepper)Flash测试时,我为Chrome指定了“--enable-bundled-ppapi-flash”和“--disable-npapi”命令行参数。在此模式下,将忽略先前的授权,并且每次都会显示弹出窗口。我还没弄清楚如何在Selenium中检测到这一点,然后点击“允许”。

是否有人知道如何通过点击“允许”或完全禁用弹出窗口来绕过此弹出窗口?

感谢。

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

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

请注意“Flash Player”中的空格。此文件是本地共享对象,编码为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 [user] \ AppData \ Local \ Temp \ scoped_dir5976_6686 \ Default \ Pepper Data \ Shockwave Flash \ WritableRoot#SharedObje CTS \ 6DMDJWLP \ macromedia.com \支持\的Adobe Flash \ SYS#1.2.3.4 \ settings.sol

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

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

2 个答案:

答案 0 :(得分:1)

事实证明,我的问题特定于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会将其权限存储在此目录中,并且因为它是一个永久性目录,在浏览器会话结束时不会被删除,所以它将存在于下一个实例中,因此将记住授予的权限。

答案 1 :(得分:0)

在linux上,该目录似乎依赖于应用程序。 chrome-browser似乎将它们存储在

~/.config/chromium/Default/Pepper Data

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

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

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