Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Selenium下载二进制文件的JS代码_Javascript_Selenium - Fatal编程技术网

Javascript 使用Selenium下载二进制文件的JS代码

Javascript 使用Selenium下载二进制文件的JS代码,javascript,selenium,Javascript,Selenium,我有一个Java代码,它使用JavaScript和Selenium下载二进制文件。它在一年前起作用,但现在刚刚停止工作 看起来我的代码所依赖的一个功能在浏览器更新后消失了。代码在Chrome上正常工作,但在Firefox上失败 我不是JavaScript开发人员,所以很难理解所有这些更改都发生在导致代码失败的数据类型上 我已经尝试过使用Bing/Google/任何东西来寻找解决方案,但没有结果 private byte[] retriveBinaryFileContent(WebDriver d

我有一个Java代码,它使用JavaScript和Selenium下载二进制文件。它在一年前起作用,但现在刚刚停止工作

看起来我的代码所依赖的一个功能在浏览器更新后消失了。代码在Chrome上正常工作,但在Firefox上失败

我不是JavaScript开发人员,所以很难理解所有这些更改都发生在导致代码失败的数据类型上

我已经尝试过使用Bing/Google/任何东西来寻找解决方案,但没有结果

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:您必须找到一种方法,在启用此配置选项的情况下设置驱动程序。