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

时间:2019-05-03 23:57:19

标签: javascript selenium

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

浏览器更新后,我的代码正在中继的功能似乎消失了。代码可以在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;
}

我收到的错误消息:

  

警告:请求的处理被异常中断。错误:   通过 X射线访问 TypedArray 数据很慢,并且按顺序禁止   鼓励绩效代码。跨源复制TypedArrays   边界,请考虑使用 Components.utils.cloneInto()

问题显然出在JS代码中,而不是Java代码中。

有人可以建议我如何解决此问题吗?

0 个答案:

没有答案