【问题标题】:Determine visible color of page elements with JQuery and/or Selenium/Webriver使用 JQuery 和/或 Selenium/Webdriver 确定页面元素的可见颜色
【发布时间】:2011-07-08 10:40:40
【问题描述】:

我寻找一种方法来确定页面元素的真实可见颜色。如果我使用 JQuery,我可以执行以下操作:

$('#foo').css('background-color');

但是,#foo 的背景颜色可能会返回“透明”,即使它的父母之一声明了彩色背景。那么,如何获得最终用户可见的正确颜色(包括半透明/RGBA)?

更新

我在 Firefox 5 中使用 Selenium2 Java API。也许也有没有 JQuery 的方法。可能涉及截图?

更新 2

我改写并扩展了问题:Get dominating color of a specific area in an image: Color Query for Web Page Elements

【问题讨论】:

  • 您可以获得该元素的background-color 属性,但您无法获得计算出的背景颜色。这是由浏览器渲染的,随着透明度和渐变的流行,可能会变得很复杂。
  • 我在 Firefox 5 中使用 Selenium 2。还有其他方法可以实现吗?

标签: jquery html css colors selenium-webdriver


【解决方案1】:

您需要遍历树以找到具有background-color 的元素,我所做的一种方法是这样的(其中textureEl 是您要检查的元素):

bgcolor = $(textureEl).css('background-color'); 
if (isTransparent(bgcolor)){
    $(textureEl).parents().each(function(){
        if (!isTransparent($(this).css('background-color'))){
            bgcolor = $(this).css('background-color');
            return false;
        }

    });
}

function isTransparent(bgcolor){
    return (bgcolor=="transparent" || bgcolor.substring(0,4) == "rgba");
}

但请注意,我的 isTransparent 函数将任何非 100% 不透明度值标记为透明,如果您不希望这样做,请重新定义如何处理 rgba 颜色。

这当然也没有考虑到background-images,但是由于您的问题没有提及它们,我的应用程序也不需要考虑它们,因此没有任何东西可以检查图像。

【讨论】:

  • 感谢您的回答。背景图像也很有趣,但我认为一开始会太复杂。您的方法看起来不错,但更好的是计算半透明背景的“真实”可见颜色。
  • @Alp 要考虑不透明度低于 1 的颜色,您需要根据混合颜色及其不透明度重新计算颜色,这可能比包含图像复杂得多。我的示例中没有图像的原因是因为在我的应用程序中,我将图像呈现在颜色之上。
  • 那么,你说的是截屏并获取指定位置的颜色吗?
猜你喜欢
  • 2019-08-26
  • 1970-01-01
  • 2019-05-01
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2013-02-12
  • 2013-12-20
相关资源
最近更新 更多