js抓取网页内容(前端侧对于动态生成的内容进行下载的实时截图下载 )

优采云 发布时间: 2021-10-27 02:08

  js抓取网页内容(前端侧对于动态生成的内容进行下载的实时截图下载

)

  有时需要在前端下载动态生成的内容,比如页面上的某条文字信息,或者分享页面的时候,希望分享的图片是页面内容的实时截图. 此时,图像是动态的。纯 HTML 显然不能满足我们的需求。借助JS和其他一些HTML5功能,例如将页面元素转换为画布,然后转换为图片以供下载。

  原理其实很简单。我们可以借助Blob将文本或JS字符串信息转换成二进制,然后作为元素的href属性,配合download属性实现下载。

  代码也比较简单,如下图(兼容Chrome和Firefox):

  

function funcDownload (content, filename) {

// 创建隐藏的可下载链接

var eleLink = document.createElement('a');

eleLink.download = filename;

eleLink.style.display = 'none';

// 字符内容转变成blob地址

var blob = new Blob([content]);

eleLink.href = URL.createObjectURL(blob);

// 触发点击

document.body.appendChild(eleLink);

eleLink.click();

// 然后移除

document.body.removeChild(eleLink);

}

function dn (){

var ss = document.querySelector('html').outerHTML;

funcDownload(ss, 'ceshi.html')

}

  其中,content是指需要下载的文本或字符串内容,filename是指下载到系统的文件名。

  以上代码可以将当前整个网页下载为html文件,但是网页内外的部分资源无法显示。

  在Chrome浏览器中,模拟点击创建的元素即使没有追加到页面中也能触发下载,但在火狐浏览器中不起作用。所以上面的funDownload()方法有一个appendChild和removeChild处理,是为了兼容火狐浏览器。

  1、URL.createObjectURL() 方法会根据传入的参数创建一个指向参数对象的URL。这个URL的生命周期只存在于创建它的文档中,新的对象URL指向执行的 File 对象。或者一个 Blob 对象。

  objectURL = URL.createObjectURL(blob || file);

  参数:文件对象或 Blob 对象。这里可能是 File 对象和 Blob 对象:

  文件对象:它是一个文件。例如,如果我上传一个带有 input type="file" 标签的文件,那么其中的每个文件都是一个 File 对象。

  Blob 对象:它是二进制数据。比如new Blob()创建的对象就是一个Blob对象。比如在XMLHttpRequest中,如果responseType指定为blob,那么得到的返回值也是一个blob对象。

  注意:每次调用 createObjectURL 时,都会创建一个新的 URL 对象。即使您为同一个文件创建了 URL。如果你不再需要这个对象,要释放它,你需要使用 URL.revokeObjectURL() 方法。当页面关闭时,浏览器会自动释放它,但为了保证良好的性能和内存使用,应该在保证不再使用时释放它。

  2、URL.revokeObjectURL() 方法将释放由 URL.createObjectURL() 创建的对象 URL。当您使用了对象 URL 时,您必须让浏览器知道该 URL 不再需要指向相应的 URL。该方法需要在安装文件时调用。具体含义是一个对象URL可以使用这个url访问指定的文件,但我可能只需要访问一次。一旦被访问,对象 URL 就不再需要,并且被释放和释放。将来,对象 URL 将不再指向指定的文件。例如,对于一张图片,我创建了一个对象 URL,然后通过这个对象 URL,我将图片加载到我的页面上。既然已经加载好了,就不用再加载这张图片了,那我就放出对象的URL。

  window.URL.revokeObjectURL(objectURL);

//objectURL 是一个通过URL.createObjectURL()方法创建的对象URL.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线