0


Selenium中对于颜色的处理及拓展

获取百度一下按钮的背景色

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')# 找到百度一下这个按钮元素
ele_baidu = driver.find_element('id','su')# 获取其css属性background-color
color = ele_baidu.value_of_css_property('background-color')print(color)#rgba(78, 110, 242, 1)print(type(color))# str类型
  • 从上面的demo中可以看出来,value_of_css_property得到的是一个str类型的字符串
  • 颜色的表达式很多类型的,rgba(78, 110, 242, 1)是一种,还有#FFFFFF这样

selenium中对于颜色的处理

  • selenium提供了一个类Color专门用于对颜色进行转换处理color ='rgba(78, 110, 242, 1)'print(Color.from_string(color).hex)# #4e6ef2
  • 看看源码,它是怎么实现的@classmethoddeffrom_string(cls, str_:str)-> Color:# 类方法,传入str(颜色),返回一个Color实例``````# Color的initdef__init__(self, red: ParseableInt, green: ParseableInt, blue: ParseableInt, alpha: ParseableFloat =1)->None: self.red =int(red) self.green =int(green) self.blue =int(blue) self.alpha ="1"iffloat(alpha)==1elsestr(float(alpha)or0)``````# 那实例的参数怎么来的呢, 关键是正则elif m.match(RGBA_PATTERN, str_):return cls(*m.groups)# 其中PATTERN很关键 RGBA_PATTERN =r"^\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0|1|0\.\d+)\s*\)\s*$"``````@propertydefhex(self)->str:returnf"#{self.red:02x}{self.green:02x}{self.blue:02x}"
  • 综上:from_string类方法传入字符串’rgba(78, 110, 242, 1)',根据正则RGBA_PATTERN解析得到三元组,对Color进行实例化,进而调用hex方法(装饰为属性),得到一个转换后的#4e6ef2

自定义方法实现

  • 上面的方法无疑是非常牛的,对正则比较熟悉的话可以借鉴,但我写不出来这样的正则
  • 我们可以用非常简单的方法来做(适配性不会那么好)
  • 无非就是对一个字符串’rgba(78, 110, 242, 1)'中的数字进行转换#4e6ef2 ,不考虑alpha的话
  • 由于有形式是rgb的,归纳为第一个(左括号后面的3个数字字符,拿到后转换下即可。
  • democolor ='rgba(78, 110, 242, 1)'print(color.index('('))# 左括号的indexprint(color.index(')'))# 右括号的indexprint(color[color.index('(')+1:color.index(')')])# 左右括号中间的部分print(color[color.index('(')+1:color.index(')')].split(',')[:3])# 用,切割rgb = color[color.index('(')+1:color.index(')')].split(',')[:3]print('#'+''.join([hex(int(_.strip()))[-2:]for _ in rgb]))# #4e6ef2
  • 稍作封装defcolorstr_to_hex(colorstr): start = colorstr.index('(') end = colorstr.index(')') rgb = colorstr[start+1:end].split(',')[:3]return'#'+''.join([hex(int(_.strip()))[-2:]for _ in rgb])color ='rgba(78, 110, 242, 1)'print(colorstr_to_hex(color))# #4e6ef2

逆向hex_to_rgb

defhex_to_rgb(hexstr):returntuple(int(hexstr.lstrip('#')[i:i+2],16)for i in(0,2,4))print(hex_to_rgb('#4e6ef2'))
  • 这里就涉及一些Python内置对象的使用,可以参考我写的另外一篇博文,Python内置对象(一)

本文转载自: https://blog.csdn.net/Mantou023/article/details/135005628
版权归原作者 wuxianfeng023 所有, 如有侵权,请联系我们删除。

“Selenium中对于颜色的处理及拓展”的评论:

还没有评论