2013-02-27 158 views
8

如何以十六進制格式定位webelement的背景顏色?用我當前的硒webdriver python代碼,它返回RGB格式的背景色。如何使用Selenium WebDriver與python獲取Web元素的顏色?

這是我在看

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代碼的HTML元素:

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%; 
+0

我發現了很多使用getCssValue for Java的解決方案?什麼是getCssValue的python等價物? – nids 2013-02-27 05:44:46

+0

python等價物是element.value_of_css_property('background-color')。但它不會返回十六進制(Java不會:https://code.google.com/p/selenium/source/browse/java/client/src/org/openqa/selenium/WebElement.java)。 unutbu的答案會給你十六進制。 – Isaac 2013-02-27 16:54:54

回答

0
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 
9

您正在尋找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

2

由於返回的格式的元組,這是可以實現的匹配,而無需使用「重新」,其中的回報是一個「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」簡單地忽略「阿爾法「

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 

由於原始有人提出了優選的方法現在是使用硒顏色支持模塊:

一個簡單的指南是here

相關問題