Selenium:在Firefox中启用XPCOM访问和从Javascript写入文件

Selenium: enable XPCOM access and write to a file from Javascript in Firefox

本文关键字:Javascript 文件 访问 XPCOM Firefox 启用 Selenium      更新时间:2023-09-26

在这个问题中有一个如何从Javascript请求XPCOM访问的示例:

如何在Mozilla Firefox中使用javascript创建文件

 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

我希望找到一种方法,以类似的方式为我的Selenium测试脚本启用XPCOM访问,以便Javascript可以直接将RAW图像数据写入文件。这实际上延续了我之前的问题,如何以优化的方式提取像素数据:

Firefox, Selenium, toDataURL, Uint8ClampedArray和Python

我希望达到的目标

  • 允许javascript通过Selenium访问XPCOM

  • 在画布上渲染图像

  • 读取画布像素作为原始图像数据(公共API应该在画布本身可用)

  • 在已知路径位置使用XPCOM接口将RAW图像数据写入文件

注意:PNG等编码是不可接受的。这必须是速度的原始数据,因为它将直接馈送到视频编码,

在我看来,这篇博客文章就是你要找的:

用XPCOM for Selenium Firefox Chrome保存到本地文件

function saveFile(fileName, val){
   try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
   } catch (e) {
      //alert("Permission to save file was denied.");
   }
   var file = Components.classes["@mozilla.org/file/local;1"]
             .createInstance(Components.interfaces.nsILocalFile);
   file.initWithPath(fileName);
   if (file.exists() == false) {
     //alert("Creating file... " );
     file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
   }
   var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
            .createInstance(Components.interfaces.nsIFileOutputStream);
   outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 ); 
   //UTF-8 convert
   var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
     .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
   uc.charset = "UTF-8";
   var data_stream = uc.ConvertFromUnicode(val);
   var result = outputStream.write(data_stream, data_stream.length );
   outputStream.close(); 
}

您必须根据您的情况(RAW数据类型)进行调整,但基本上就是这样!

我不太了解Selenium,但是如果您可以在运行页面的Firefox版本上安装扩展,那么您可以在加载页面时将自己的脚本注入页面。查看这个SO答案