在这个问题中,有一个示例如何从Javascript请求xpcOM访问:
How to create a file using javascript in Mozilla Firefox
netscape.security.PrivilegeManager.enablePrivilege("Universalxpconnect");
我希望找到一种以类似的方式为我的Selenium测试脚本启用xpcOM访问的方法,以便Javascript可以将RAW图像数据直接写入文件.这实际上继续了我先前的问题,即如何以优化的方式提取像素数据:
Firefox, Selenium, toDataURL, Uint8ClampedArray and Python
我希望实现的目标
>为通过Selenium运行的JavaScript启用xpcOM访问
>在画布上渲染图像
>读取画布像素作为原始图像数据(画布本身应具有公共API)
>使用xpcOM接口在已知路径位置将RAW图像数据写入文件
注意:PNG等编码无法使用.这必须是速度的原始数据,因为它将直接输入视频编码,
解决方法:
Save to local files with 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数据类型)对其进行调整,但是基本上就是这样!