10

如何以十六进制格式定位 web 元素的背景颜色?使用我当前的 selenium webdriver python 代码,它以 RGB 格式返回背景颜色。

这是我正在查看的 html 元素

div class="bar" style="background-color: #DD514C; background-image: -moz-linear-gradient(center top , #EE5F5B, #C43C35); background-image: -webkit-linear-gradient(top , #EE5F5B, #C43C35); background-image: -ms-linear-gradient(top , #EE5F5B, #C43C35); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#EE5F5B, endColorstr=#C43C35, GradientType=0); background-repeat: repeat-x; color: #ffffff; width: 11.5%"

我的 webdriver python 代码是:

find_element_by_class_name("bar").get_attribute("style")

它以 rgb 格式返回具有颜色的样式。我想专门获取十六进制格式的背景颜色,以便我可以将它与我的预期值进行比较。我现在得到以下输出:

background-color: rgb(221, 81, 76); background-image: -moz-linear-gradient(center top , rgb(238, 95, 91), rgb(196, 60, 53)); background-repeat: repeat-x; color: rgb(255, 255, 255); width: 11.5%;
4

4 回答 4

15

您正在寻找value_of_css_property('background-color')

rgb = find_element_by_class_name("bar").value_of_css_property('background-color')

但是,这将返回字符串rgb(221, 81, 76)。为了获得它的十六进制值,您可以使用@unutbu 的答案:

import re
...
rgb = find_element_by_class_name("bar").value_of_css_property('background-color')

r,g,b = map(int, re.search(
             r'rgb\((\d+),\s*(\d+),\s*(\d+)', rgb).groups())
color = '#%02x%02x%02x' % (r, g, b)

你的十六进制color是字符串#dd514c

于 2013-02-27T16:53:00.850 回答
6

要转换颜色,可以直接使用 selenium 的 Color 类:

from selenium.webdriver.support.color import Color

rgb = find_element_by_class_name("bar").value_of_css_property('background-color')
hex = Color.from_string(rgb).hex

硒文档

于 2018-04-14T04:18:12.527 回答
2

由于返回的格式与元组匹配,因此无需使用“re”即可实现,其中返回是“rgba”字符串:

import ast

rgba = element.value_of_css_property("background-color")
r, g, b, alpha = ast.literal_eval(rgba.strip("rgba"))
hex_value = '#%02x%02x%02x' % (r, g, b)
return hex_value, alpha

字符串是 'rgb' 的地方只是省略了“alpha”

import ast

rgb = element.value_of_css_property("background-color")
r, g, b = ast.literal_eval(rgb.strip("rgb"))
hex_value = '#%02x%02x%02x' % (r, g, b)
return hex_value

由于提出了原始问题,现在首选的方法是使用硒颜色支持模块:

一个简单的指南在这里

于 2015-03-04T13:54:10.520 回答
2
import re

# style = find_element_by_class_name("bar").get_attribute("style")

style = 'background-color: rgb(221, 81, 76); background-image: -moz-linear-gradient(center top , rgb(238, 95, 91), rgb(196, 60, 53)); background-repeat: repeat-x; color: rgb(255, 255, 255); width: 11.5%;'

r,g,b = map(int, re.search(
    r'background-color: rgb\((\d+),\s*(\d+),\s*(\d+)\)', style).groups())
print('{:X}{:X}{:X}'.format(r, g, b))

产量

DD514C
于 2013-02-27T02:22:56.670 回答