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. Oracle部署,关于日志文件系统选择(硬盘格式化、挂载)

    之前部署过好多Oracle服务,采用的日志文件系统一直是ext3.但是我观察到很多人在格式化/挂载数据盘时,采用的日志文件系统类型有ext3.ext4.xfs等,这不禁让我发出疑问,哪个类型的数据处理 ...

  2. 我的Vue之旅 10 Gin重写后端、实现页面详情页 Mysql + Golang + Gin

    第三期 · 使用 Vue 3.1 + Axios + Golang + Mysql + Gin 实现页面详情页 使用 Gin 框架重写后端 Gin Web Framework (gin-gonic.c ...

  3. Unity之"诡异"的协程

    为什么说是诡异的协程呢?首先从一个案例说起吧,示例如下: 游戏目标:让小车进入到对应颜色屋子里,即可获得一分.(转弯的道路可控)   为了让小车能够平滑转弯,小车的前进方向需要和车子的位置与圆心组成的 ...

  4. Day10:for循环结构的使用详解

    for循环 将0~100内的奇.偶数分别求和 思路 第一步先将0~100以内的奇.偶数分成两队,第二步使奇数累加.ou'shu public class ForCirculate{ public st ...

  5. srcddd

    目录 application assembler UserReq.go UserRsp.go dto MessageResult.go UserDTO.go services UserService. ...

  6. 优雅的重启uwsgi 告别uwsgi reload过程中造成的无法请求、请求延迟等问题

    [uwsgi]#使用优雅重启 lazy-apps = true #监听monitor文件 当monitor文件发生改变是重启uwsgi touch-chain-reload = /home/monit ...

  7. DevExpress中GridControl控件焦点改变时触发事件

    FocusedRowObjectChanged 事件.可以在焦点改变一行的时候触发对应的事件. 做一个记录 大家如果有问题可以 Console.WriteLine("加群"+&qu ...

  8. On Java 8读书笔记

    第一章 什么是对象 1.1 抽象的历程 "对象":问题空间中的元素及其解决方案空间中的具体呈现. 理念即是通过添加各种新的对象,可以将程序改编为一种描述问题的语言. 对象是具有状态 ...

  9. Java常用开发文档及工具

    一.实用工具/网站 1.PHP中文网:https://www.php.cn/ 2.Json工具:http://www.bejson.com/ 3.IT大哥导航:https://itdage.com/ ...

  10. 前端Ui设计常用WEB框架

    目录 一:前端Ui常用框架 1.Bootstrap 2.Font Awesome框架 二.前端其他UI框架 1.Pure 2.bootstrap 3.EasyUI 4.Ant Design 5. La ...