首页 文章

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

提问于
浏览
3

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

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

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

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

谢谢 .

Update: 我发现非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 \ support \ flashplayer \ sys#1.2.3.4 \ settings.sol

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

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

2 回答

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

  • 0

    在linux上,该目录似乎依赖于应用程序 . 铬浏览器似乎存储它们

    ~/.config/chromium/Default/Pepper Data
    

    Qt WebEngine程序似乎存储它们

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

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

相关问题