Google chrome 我该如何绕过这个“问题”;闪光灯和麦克风接入”;在铬中使用Pepper/PPAPI闪存时弹出(通过硒)?

Google chrome 我该如何绕过这个“问题”;闪光灯和麦克风接入”;在铬中使用Pepper/PPAPI闪存时弹出(通过硒)?,google-chrome,flash,selenium,Google Chrome,Flash,Selenium,Chrome支持两种Flash:NPAPI和PPAPI(胡椒粉)。这两种实现似乎以不同的方式处理摄像头和麦克风权限。具体而言,PPAPI(Pepper)似乎不尊重之前授予的任何许可 使用默认的NPAPI,当我第一次导航到请求使用计算机摄像头和麦克风权限的Flash站点时,一个Adobe Flash弹出窗口会要求用户允许或拒绝访问。我允许访问,此授权将被记住。下次我导航到该站点时,权限将自动授予,而不显示弹出窗口 当我想使用PPAPI(Pepper)Flash进行测试时,我会将“-enable b

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

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

当我想使用PPAPI(Pepper)Flash进行测试时,我会将“-enable bundled PPAPI Flash”和“-disable npapi”命令行参数指定给Chrome。在此模式下,将忽略以前的授予,并且每次都会显示弹出窗口。我还没有弄清楚如何在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忽略此目录,而是为每个Chrome实例获取一个新的临时目录:

C:\Users[user]\AppData\Local\Temp\scoped\u dir5976\u 6686\Default\Pepper Data\Shockwave Flash\writeableroot\SharedObje cts\6DMDJWLP\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
C:\Users[user]\AppData\Local\Temp\scoped_dir5976_6686
Pepper Flash不使用此目录作为其权限,因此不遵守存储在其中的设置。相反,它将其权限文件存储在Chrome用户数据目录下的子目录中

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

C:\Users[user]\AppData\Roaming\Macromedia\Flash  Player\macromedia.com\support\flashplayer\sys
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上,该目录似乎取决于应用程序。chromium浏览器似乎将它们存储在

~/.config/chromium/Default/Pepper Data
~/.local/share/[NAMEOFTHEAPPLICATION]/QtWebEngine/Default/Pepper Data
Qt WebEngine程序似乎将它们存储在

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

我需要删除该目录以撤销访问网络摄像头的永久许可(我已将其交给一个网站进行测试)。

我也有同样的问题。我正在寻找一个解决方案。我想这个讨论页面上的Adobe工程师知道答案,但是这个主题被锁定了,我在上面打开的新主题被忽略了:也许你能理解他在说什么。