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

3
在这个问题中,有一个示例展示了如何从Javascript请求XPCOM访问:

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

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

我希望找到一种类似的方式来启用XPCOM访问我的Selenium测试脚本,以便JavaScript可以直接将RAW图像数据写入文件。这实际上是继续了我之前的问题,如何以优化的方式从中提取像素数据:
Firefox、Selenium、toDataURL、Uint8ClampedArray和Python
我希望实现以下目标:
  • 为通过Selenium运行的JavaScript启用XPCOM访问
  • 在Canvas上渲染图像
  • 将画布像素作为原始图像数据读取(公共API应该在画布本身上可用)
  • 使用XPCOM接口将RAW图像数据写入已知路径位置的文件
注意:PNG等编码是不可接受的。这必须是原始数据,以提高速度,因为它将直接馈送给视频编码器。
2个回答

3

我觉得这篇博客文章可能是你在寻找的:

XPCOM与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数据类型),但基本上就是这样!


0

我对Selenium不是很了解,但是如果你可以在运行页面的Firefox版本上安装一个扩展程序,那么当页面加载时,你就可以注入自己的脚本。请参考这个SO 答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接