【问题标题】:Reading plan/text from blob url从 blob url 读取计划/文本
【发布时间】:2016-12-22 20:52:02
【问题描述】:

要求是使用 Java 将 pdf 文本读取为字符串以进行测试。我不确定是否可以使用从浏览器中提取的 Blob url 来提取内容。

这就是我在 DOM 中看到的

<embed id="plugin" type="application/x-google-chrome-pdf" src="blob:https://XXX.XX.XXX.com/d4c1b2ec-bd22-4e7c-aa41-31d6ba5212b3" stream-url="blob:chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/141ca21a-5f63-410b-a4c8-dc9a0554eb77" headers="Content-Length: 8159 Content-Type: application/pdf " background-color="0xFF525659" top-toolbar-height="56">

我最初认为应该有一种方法可以提取文本(纯文本或 base64 编码),然后将其转换为特定格式,但由于我对 Blob url 的理解有限,我无法找到任何答案。

这是我迄今为止尝试过的,但我得到了空响应。

var xhr = new XMLHttpRequest;
xhr.responseType = 'text';

xhr.onload = function() {
   var recoveredBlob = xhr.response;

   var reader = new FileReader;

   reader.onload = function() {
     var blobAsDataUrl = reader.result;
     window.location = blobAsDataUrl;
   };

   reader.readAsDataURL(recoveredBlob);
};

xhr.open('GET', 'blob:https://XXX.XX.XXX.com/d4c1b2ec-bd22-4e7c-aa41-31d6ba5212b3');
xhr.send();

还值得一提的是,我正在使用 Selenium 执行这个脚本。我的目标是在不将 pdf 下载到任何本地机器的情况下提取数据。所以,最终我有两个困惑:

  1. 是否可以从创建为“Content-Type: application/pdf”的 blob url 中提取数据?
  2. 还有其他方法吗?可能,将 blob url 转换为 dataurl,然后将内容提取为字符串?

【问题讨论】:

  • Blob url 仅在创建它的客户端上可用,并且仅适用于创建它的域。
  • @Musa 我正在使用相同的浏览器会话。你的意思是即使我在同一个会话和同一个浏览器上,我也无法提取文本?
  • 您是否在同一域的页面上运行代码?
  • 是相同的域,相同的浏览器和相同的会话。
  • 尝试将 xhr.responseType 从文本更改为 blob。

标签: javascript java selenium url blob


【解决方案1】:

我最终使用 Javascript 执行器从 Selenium 运行以下脚本。

public static String generateDataUrlFromBlobUrl(String blobUrl){

    
       return String.format("var xhr = new XMLHttpRequest;\r\n" + 
            "xhr.responseType = 'blob';\r\n" + 
            "\r\n" + 
            "xhr.onload = function() {\r\n" + 
            "   var recoveredBlob = xhr.response;\r\n" + 
            "\r\n" + 
            "   var reader = new FileReader;\r\n" + 
            "\r\n" + 
            "   reader.onload = function() {\r\n" + 
            "     var blobAsDataUrl = reader.result;\r\n" + 
            "     window.location = blobAsDataUrl;\r\n" + 
            "   };\r\n" + 
            "\r\n" + 
            "   reader.readAsDataURL(recoveredBlob);\r\n" + 
            "};\r\n" + 
            "\r\n" + 
            "xhr.open('GET', '%s');\r\n" + 
            "xhr.send();", blobUrl);
}

【讨论】:

    猜你喜欢
    • 2019-11-12
    • 2011-12-27
    • 2020-03-20
    • 2018-06-15
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多