Javascript 我可以在不加载图像的情况下获得图像的自然化吗?

Javascript 我可以在不加载图像的情况下获得图像的自然化吗?,javascript,puppeteer,Javascript,Puppeteer,我试图在不加载图像的情况下获得图像的自然宽度和自然高度,以加快速度。 有办法吗?谢谢大家! 编辑: 我被告知分享一些代码,但我真的不知道该分享什么 以下是我用来获取所有大小图像的方法: const images_datas = await this.page.$$eval('img', imgs => { var images_data = [] var empty_images = 0 imgs.forEach(img => {

我试图在不加载图像的情况下获得图像的自然宽度和自然高度,以加快速度。 有办法吗?谢谢大家!

编辑: 我被告知分享一些代码,但我真的不知道该分享什么

以下是我用来获取所有大小图像的方法:

const images_datas = await this.page.$$eval('img', imgs => {
      var images_data = []
      var empty_images = 0
      imgs.forEach(img => {
        if(img.naturalWidth*img.naturalHeight == 0 || ( img.naturalHeight == 1 && img.naturalWidth == 1)){
          empty_images++
        } else {
          images_data.push({'url': img.src, 'width': img.naturalWidth, 'height' : img.naturalHeight, 'alt' : img.alt})
        }
      });
      return {'images_data': images_data, 'nb_empty_images': empty_images}
} );
以及我用来阻止图像加载的代码

await page.setRequestInterception(true);
page.on('request', request => {
    if (request.resourceType() === 'image')
      request.abort();
    else
      request.continue();
});

但是这两个代码不能一起工作…

如果您可以控制服务器,则可以将图像的大小作为HTTP头传递。否则,在不加载图像的情况下,只能读取图像的大小

读取图像的大小 下面的代码是关于如何在不下载图像的情况下读取图像大小(以字节为单位)的一个简单示例。它将中止任何图像请求,然后执行
请求,仅请求文件头读取
内容长度
头。请注意,这只返回文件的总大小,而不是宽度或高度

const puppeter=require('puppeter');
const fetch=require('node-fetch');
(异步()=>{
const browser=wait puppeter.launch();
const page=wait browser.newPage();
等待页面。setRequestInterception(true);
page.on('request',interceptedRequest=>{
if(interceptedRequest.resourceType()=='image'){
interceptedRequest.abort();
const response=await fetch(interceptedRequest.url(){
方法:“头”
});
if(response.ok){
const sizeOfImage=response.headers.get('content-length');
//句柄图像大小
}否则{
//出了点问题。。。
}
}否则{
interceptedRequest.continue();
}
});
等待page.goto(“…”);
等待浏览器关闭();
})();
将图像的大小作为标题传递 如果您控制了后端/服务器,您可以将图像的大小作为标头传递,并使用前面给出的相同代码读取它。只需将标题从
content length
更改为发送宽度和高度的标题

因为你没有说任何关于后端的事情,我认为这是不可能的。如果您可以控制后端,并且使用Node.js作为后端,您可能需要阅读关于如何操作的问题



如果不加载图像,则无法执行更多操作。如果您不控制服务器,但需要知道图像的
naturalHeight
naturalWidth
属性,那么您必须加载图像。

您可以分享一些代码吗?我认为这可能是重复的,因为帖子被标记为“木偶人”。因此,这不仅仅是关于JavaScript的客户端。理想情况下,实现这一点的方法是使用BE引擎,它为您计算值,并在加载之前为您提供这些值,否则我认为没有办法知道不加载文件的值。在我的情况下,这不是response.headers()['content-length']。get函数在这里不起作用。。。