javascript - 使用 Selenium 下载二进制文件的 JS 代码
问题描述
我有一个 Java 代码,它使用 JavaScript 和 Selenium 来下载二进制文件。它在一年前工作,但现在刚刚停止工作。
看起来我的代码中继的功能在浏览器更新后消失了。代码在 Chrome 上正常工作,但在 Firefox 上失败。
我不是 JavaScript 开发人员,所以很难理解所有这些变化都发生在导致我的代码失败的数据类型上。
我已经尝试使用 Bing/Google/Whatever 来寻找解决方案,但没有结果。
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 代码中。
有人可以建议我如何解决这个问题吗?
解决方案
推荐阅读
- xml - 使用 VBA 在 VBA 中使用 xslt 将 XML 导入 MS Access
- c - mingw64 pjsip sizeof(fd_set) 总是双倍 sizeof(pj_fd_set_t) 导致 sock_select.c 中的断言
- python-3.x - 将大于 A 的值替换为 B,将小于 C 的值替换为 D
- c# - 在 C# 中有效电子邮件地址的域部分添加“test-”
- swiftui - 如何在 SwiftUI NavigationButton 中包装文本?
- sql - BigQuery/我无法正确使用“in”子句
- r - 使用赋值运算符在 R 的 for 循环中创建多个 df
- c# - MVC 在使用 API 调用时允许 XSS 攻击
- python - 装饰器停止自动运行
- c# - Asp.Net Core Identity 获取整数用户 ID