【问题标题】:Finding the image count in a web page查找网页中的图像计数
【发布时间】:2017-02-14 09:30:06
【问题描述】:

我有一个 JS 代码,它在我的客户的不同网页中被调用。我想获取图像的总数。 我只想要那些对用户可见的图像,而不是任何其他图像。这是我的 JS 代码

    function getImageCount(topWindow) {
        try {
            var images = topWindow.document.getElementsByTagName('img');
            var imageCount;
            for (var i=0, length = images.length; i < length; i++) {
                var image = images[i];
                var clientWidth = image.clientWidth;
                if(clientWidth && clientWidth > 1) {
                    var src = image.getAttribute('src');
                    if(src) {
                        src = src.toLowerCase();
                        if(src.indexOf('.jpg') !== -1 ||
                           src.indexOf('.jpeg') !== -1 ||
                           src.indexOf('.gif') !== -1 ||
                           src.indexOf('png') !== -1) {
                           imageCount =  imageCount ? ++imageCount : 1;
                        }
                    }
                }
            }
            return imageCount;
        } catch (e) {
            processError("getImageCount", e);
        }
    }
 var imageCount = getImageCount(top);

我一直在努力稳定这段代码,以便它在所有不同类型的网页上都能正常工作。基本上我想要的是一个能正确捕获图像计数的通用代码。

例如: 我的代码将http://www.msn.com/en-us/news/other/one-free-agent-every-nfl-team-should-sign-this-offseason/ss-AAmLlC0#image 的图像计数为 1

我想要的是一个通用代码,它可以为我提供正确的图像计数,而不管它在哪里运行。谁能给我一些详细的解决方案。

非常感谢。

【问题讨论】:

  • 是否也应该计算 iframe 中的图像?
  • top 在 MDN。还有 CSS 附加到元素背景的图片,还有画在 canvas 和 svg 元素中的图片,也应该算进去吗?
  • 是的,如果它们是可见的,我们需要考虑它们。
  • 我认为您必须计算所有加载 css 的图像,因为您无法知道哪些是可见的,哪些是不可见的。然后你需要一些函数来检查视口内的图像。但大概您需要将其绑定到滚动功能(因为可见的图像会在滚动时发生变化)。
  • 您的所有要求使问题过于宽泛。 SO上有关于检测元素可见性和查找CSS图像的帖子,请搜索它们。您可以将 the answer of mine 应用于 iframe 中的搜索元素,“无论 [代码] 在何处运行”。您可以将所有画布和 svg 视为图像,从技术上讲它们是图像,尽管它们可能仅包含纯文本。将所有细节结合到您的代码中,如果您遇到困难,请提出一个新问题。

标签: javascript image


【解决方案1】:

简单计算页面上的所有图像 (&lt;img&gt;):

document.images.length

并计算所有“可见”图像(具有宽度和高度的图像):

[...document.images].filter(img => img.clientWidth && img.clientHeight).length

这将为您提供页面上的图像数量。这包含 CSS 图像。因为你的代码也没有,所以我认为你想要 &lt;img&gt;


我不太明白无论它在哪里运行..你能详细说明一下吗?

【讨论】:

  • Top 基本上是 javascript 的“top”变量。我想要用户可见的有效图像并忽略所有其他图像。
  • 对不起,我忘了说我只想要那些对用户可见的图像。我编辑了这个问题。谢谢
  • @Juvenik - 可能可见?因为用户可能永远不会滚动查看它们,或者它们可能是 lazyloaded 所以它们在滚动到之前是不可见的。您无法真正知道它们是否延迟加载
  • 如果它们不是延迟加载的怎么办。怎么弄的。
  • @Juvenik - 您无法知道 CSS 中的图像是否应该被看到。有些可能用于hover 或用于重新加载,并且很多时候 CSS 引用的 HTML 代码根本不存在或已被弃用。检查 CSS 恕我直言是没有意义的。
【解决方案2】:

// 提取图片

websiteImages = document.getElementsByTagName('img'); 
for (url in websiteImages) 
console.log(websiteImages.length);

//提取入站和出站链接

Links = document.querySelectorAll('a'); 
for (link in Links) 
console.log(Links[link].href);
  1. 将此脚本粘贴到您的浏览器控制台中
  2. 检查以下链接/您喜欢的任何链接 (https://news.google.com/topstories?hl=en-IN&gl=IN&ceid=IN:en&gl=IN&ceid=IN:en)
  3. 上述脚本将提供网页中存在的所有图像。 第二个脚本将提供所有入站和出站/退出链接的数量
  4. 只需根据您的用例应用一些过滤器即可。

【讨论】:

    【解决方案3】:

    对链接使用这种简单的方法

    $$('a').length

    【讨论】:

      【解决方案4】:

      要计算网页上的图像数量,请使用以下代码:

      $$('img').length
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 2011-11-23
        • 2012-01-27
        • 2013-08-20
        • 1970-01-01
        • 2016-06-21
        相关资源
        最近更新 更多