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
  • 看看源码,它是怎么实现的

        @classmethod
    def from_string(cls, str_: str) -> Color:
    # 类方法,传入str(颜色),返回一个Color实例
        # Color的init
    def __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" if float(alpha) == 1 else str(float(alpha) or 0)
    # 那实例的参数怎么来的呢, 关键是正则
    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*$"
        @property
    def hex(self) -> str:
    return f"#{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个数字字符,拿到后转换下即可。

  • demo

    color = 'rgba(78, 110, 242, 1)'
    print(color.index('(')) # 左括号的index
    print(color.index(')')) # 右括号的index
    print(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
  • 稍作封装

    def colorstr_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

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

Selenium中对于颜色的处理及拓展的更多相关文章

  1. Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...

  2. 计算机中的颜色XIV——快速变换颜色的V分量

    基本知识回顾: 计算机中的颜色Color,用RGB模式存储(用R.G.B三个分量表示颜色,每个分量的范围是0—255). 而计算机中的颜色除了用RGB模式表示以外,常见的还有HSV模式(或者是HSB. ...

  3. selenium中处理不带ID的弹出窗口

    在selenium中虽然有selectWindow(String windowID) 方法,但是对于一些窗口很难取得其window ID的话,如果开发人员没有在html代码中提供ID ,或者getAl ...

  4. HTML5 Canvas 中的颜色、样式和阴影的属性和方法

    颜色.样式和阴影的属性与方法 fillStyle                设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle         设置或返回用于笔触的颜色.渐变或模式 ...

  5. 转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. ...

  6. iOS中的颜色

    最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下. 先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout ...

  7. Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  8. Python selenium中注入并执行Javascript语句

    众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...

  9. CSS中的颜色问题

    css颜色: CSS 颜色 颜色是通过对红.绿和蓝光的组合来显示的 颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十 ...

  10. 【Selenium】selenium中隐藏元素如何定位?

    前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...

随机推荐

  1. <四>构造函数初始化列表

    示例代码1 点击查看代码 class CDate{ public: CDate(int _year,int _month, int _day){ this->year=_year; this-& ...

  2. ui自动化测试数据复原遇到的坑——1、hibernate输出完整sql

    公司老项目使用SSH+informix+weblogic+IE开发,我们要做ui自动化测试,其中的测试数据复原,我打算通过hibernate输出sql,然后把插入.更新的sql改为delete或upd ...

  3. 基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群

    Sealos 是一个快速构建高可用 k8s 集群的命令行工具,该工具部署时会在第一个 k8s master 节点部署 registry 服务(sealos.hub),该域名通过 hosts 解析到第一 ...

  4. 基于SpERT的中文关系抽取

    SpERT_chinese 基于论文SpERT: "Span-based Entity and Relation Transformer"的中文关系抽取,同时抽取实体.实体类别和关 ...

  5. Go语言核心36讲06

    我已经为你打开了Go语言编程之门,并向你展示了"程序从初建到拆分,再到模块化"的基本演化路径. 一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会 ...

  6. [Android开发学iOS系列] TableView展现一个list

    TableView 基础 本文讲讲TableView的基本使用. 顺便介绍一下delegation. TableView用来做什么 TableView用来展示一个很长的list. 和Android中的 ...

  7. Visual Studio高版本 ArcObject for .Net 低版本

    在基于ArcGIS的开发中,经常会存在Visual Studio版本高,ArcObject for .Net 版本低的问题.例如Visual Studio 2015的环境下,安装ArcObject f ...

  8. 数电第8周周结_by_yc

    基本知识: 1.有限状态机的分类: Moore型:输出仅与电路的状态有关: Mealy型:输出与当前电路状态和当前电路输入有关. 2.有限状态机的描述方法: 状态转换图:节点:状态(Moore输出): ...

  9. PostgreSQL:查询元数据(表 、字段)信息、库表导入导出命令

    一.查询表.模式及字段信息 1.查询指定模式下的所有表 select tablename,* from pg_tables where schemaname = 'ods'; 2.查询指定模式下的表名 ...

  10. go-dongle 0.2.0 版本发布了,一个轻量级、语义化的 golang 编码解码、加密解密库

    dongle 是一个轻量级.语义化.对开发者友好的 Golang 编码解码和加密解密库 Dongle 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧 github.com/g ...