Javascript 使用Selenium下载二进制文件的JS代码
我有一个Java代码,它使用JavaScript和Selenium下载二进制文件。它在一年前起作用,但现在刚刚停止工作 看起来我的代码所依赖的一个功能在浏览器更新后消失了。代码在Chrome上正常工作,但在Firefox上失败 我不是JavaScript开发人员,所以很难理解所有这些更改都发生在导致代码失败的数据类型上 我已经尝试过使用Bing/Google/任何东西来寻找解决方案,但没有结果Javascript 使用Selenium下载二进制文件的JS代码,javascript,selenium,Javascript,Selenium,我有一个Java代码,它使用JavaScript和Selenium下载二进制文件。它在一年前起作用,但现在刚刚停止工作 看起来我的代码所依赖的一个功能在浏览器更新后消失了。代码在Chrome上正常工作,但在Firefox上失败 我不是JavaScript开发人员,所以很难理解所有这些更改都发生在导致代码失败的数据类型上 我已经尝试过使用Bing/Google/任何东西来寻找解决方案,但没有结果 private byte[] retriveBinaryFileContent(WebDriver d
private byte[] retriveBinaryFileContent(WebDriver driver) throws IOException {
String script = "var url = arguments[0];"
+ "var callback = arguments[arguments.length - 1];"
+ "var xhr = new XMLHttpRequest();"
+ "xhr.open('GET', url, true);"
+ "xhr.responseType = \"arraybuffer\";"
+ "xhr.onload = function() {"
+ " var arrayBuffer = xhr.response;"
+ " var byteArray = new Uint8Array(arrayBuffer);"
+ " callback(byteArray);"
+ "};"
+ "xhr.send();";
Object response = ((JavascriptExecutor) driver).executeAsyncScript(script, "https://preventioncdnndg.org/eco-quartier/wp-content/uploads/sites/3/2015/09/tree-300x278.jpg");
List<Long> byteList = (ArrayList<Long>) response;
byte[] bytes = new byte[byteList.size()];
for (int i = 0; i < byteList.size(); i++) {
bytes[i] = (byte) (long) byteList.get(i);
}
return bytes;
}
private byte[]RetrieveBinaryFileContent(WebDriver驱动程序)引发IOException{
String script=“var url=arguments[0];”
+“var callback=arguments[arguments.length-1];”
+“var xhr=new XMLHttpRequest();”
+xhr.open('GET',url,true);“
+“xhr.responseType=\“arraybuffer\”
+“xhr.onload=函数(){”
+“var arrayBuffer=xhr.response;”
+“var byteArray=新的Uint8Array(arrayBuffer);”
+“回调(byteArray);”
+ "};"
+“xhr.send();”;
对象响应=((JavascriptExecutor)驱动程序)。executeAsyncScript(脚本https://preventioncdnndg.org/eco-quartier/wp-content/uploads/sites/3/2015/09/tree-300x278.jpg");
List byteList=(ArrayList)响应;
byte[]bytes=新字节[byteList.size()];
对于(int i=0;i
我收到的错误消息:
警告:请求处理被异常中断。错误:
通过X射线访问类型DARRAY数据速度慢,按顺序禁止访问
鼓励执行代码。跨原点复制TypeDarray的步骤
边界,考虑使用<强>组件。UTIL.CLONIOTO()<<强> > /P>
问题显然存在于JS代码中,而不是Java代码中
有人能告诉我如何解决这个问题吗?driver.getCurrentUrl()的返回值是多少?乍一看,您似乎没有将一个可调用的url作为参数传递给脚本。一些链接可能会有所帮助:因此我想这在Firefox中将严格适用:
callback(Components.utils.xray(byteArray))代码>。但请注意,组件
已被弃用。请参阅此页以启用组件。utils:您必须找到一种方法,在启用此配置选项的情况下设置驱动程序。驱动程序.getCurrentUrl()的返回值是多少?乍一看,您似乎没有将一个可调用的url作为参数传递给脚本。一些链接可能会有所帮助:因此我想这在Firefox中将严格适用:callback(Components.utils.xray(byteArray))代码>。但是请注意,Components
已被弃用。请参阅此页以启用Components.utils:您必须找到一种方法,在启用此配置选项的情况下设置驱动程序。