JS同步XMLHttpRequest请求中不能更改responseType解决办法

我是用JAVA写seleium做自动化的,最近遇到一个问题足足困扰了两天,就是想用Js来下载DPF文件转base64,但是遇到各种坑,最终是在老同事的代码中找到解决方法,本文是JAVA代码,前端可绕道了(或参考第二行写法)

直接上代码

private String getOrderContentJs(String href){
        return "function getJs(){let xhr=new XMLHttpRequest();xhr.open('get','" + href + "');xhr.responseType='blob';xhr.onreadystatechange=function(){if(xhr.readyState===4&&xhr.status===200){var blob=new Blob([xhr.response],{type:'text/html'});let reader=new FileReader();reader.readAsDataURL(blob);reader.οnlοad=function(readerEvt){var binaryString=readerEvt.target.result;window.textData=binaryString}}};xhr.send('" + href + "')}getJs()";
}

private File doDownloadPDFFile(WebDriver driver, String url, String fileName) throws Exception {
        ((JavascriptExecutor) driver).executeScript(getOrderContentJs(url));
        String content = "";
        for (int i = 0; i < 10; i++) {
            Object returnObj = ((JavascriptExecutor) driver).executeScript("return window.textData");
            if (ObjectUtils.isNotEmpty(returnObj)) {
                content = returnObj.toString();
                break;
            }
            sleep(5000L);
        }

        if (StringUtils.isEmpty(content)) {
            return null;
        }
        String fileStr = content.split(",")[1];
        File file = new File(fileName);
        File parentFile = file.getParentFile();
        if (!parentFile.exists()) {
            parentFile.mkdirs();
        }
        if (!file.exists()) {
            file.createNewFile();
        }
        base64ToFile(fileStr, file);
        return file;
}
    


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值