Selenium中对于颜色的处理及拓展
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中对于颜色的处理及拓展的更多相关文章
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...
- 计算机中的颜色XIV——快速变换颜色的V分量
基本知识回顾: 计算机中的颜色Color,用RGB模式存储(用R.G.B三个分量表示颜色,每个分量的范围是0—255). 而计算机中的颜色除了用RGB模式表示以外,常见的还有HSV模式(或者是HSB. ...
- selenium中处理不带ID的弹出窗口
在selenium中虽然有selectWindow(String windowID) 方法,但是对于一些窗口很难取得其window ID的话,如果开发人员没有在html代码中提供ID ,或者getAl ...
- HTML5 Canvas 中的颜色、样式和阴影的属性和方法
颜色.样式和阴影的属性与方法 fillStyle 设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle 设置或返回用于笔触的颜色.渐变或模式 ...
- 转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法
最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. ...
- iOS中的颜色
最近在改Bug的时候,才注意到iOS 中的颜色竟然也大有文章,特来记录一下. 先说一下问题,因为某界面中有用xib实现的一个view,而这个view 只在UIColletionView的layout ...
- Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...
- Python selenium中注入并执行Javascript语句
众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...
- CSS中的颜色问题
css颜色: CSS 颜色 颜色是通过对红.绿和蓝光的组合来显示的 颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十 ...
- 【Selenium】selenium中隐藏元素如何定位?
前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...
随机推荐
- Codeforces Round #829 (Div. 2) D. Factorial Divisibility(数学)
题目链接 题目大意: \(~~\)给定n个正整数和一个数k,问这n个数的阶乘之和能不能被k的阶乘整除 既:(a\(_{1}\)!+a\(_{2}\)!+a\(_{3}\)!+....+a\(_{n}\ ...
- 【深入浅出 Yarn 架构与实现】2-1 Yarn 基础库概述
了解 Yarn 基础库是后面阅读 Yarn 源码的基础,本节对 Yarn 基础库做总体的介绍.并对其中使用的第三方库 Protocol Buffers 和 Avro 是什么.怎么用做简要的介绍. 一. ...
- BigDecimal精度详解
[BigDecimal精确度的计数保留法及精度丢失的解决办法] 目录 BigDecimal精确度的计数保留法 1.ROUND_UP 2.ROUND_DOWN 3.ROUND_HALF_UP 4.ROU ...
- 2022春每日一题:Day 29
题目:Mishka and Interesting sum 这题稍微分析就能发现实际这个题就是求区间异或和异或上区间不同数的异或和,因此直接转化为HH的项链. 代码: #include <cst ...
- Postman使用指导
1. 下载好Postman,不用注册账号,直接离线使用 2. 软件的配置修改: 2.1关闭SSL认证 2.2关闭系统代理 2.3上传证书填写hosthost为服务器地址和端口:crt和key可以通过国 ...
- Go语言核心36讲27
在前面的文章中,我们一起学习了Go程序测试的基础知识和基本测试手法.这主要包括了Go程序测试的基本规则和主要流程.testing.T类型和testing.B类型的常用方法.go test命令的基本使用 ...
- 已经有 MESI 协议,为什么还需要 volatile 关键字?
本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...
- Kubernetes基础_Service暴露的两种方式
一.前言 kubernetes集群中,pod是多变的,可以被新建或删除,而且ip不稳定,不方便集群外部访问,所以提供了一种新的资源 Service ,就是就是 a set of Pod ,作用是提供一 ...
- html网页图片加载失败的友好处理方式
网络环境总是多样且复杂的,一张网页图片可能会因为网路状况差而加载失败或加载超长时间,也可能因为权限不足或者资源不存在而加载失败,这些都会导致用户体验变差,所以我们需要对图片加载失败时的情况进行一个弥补 ...
- Java开发学习(四十六)----MyBatisPlus新增语句之id生成策略控制及其简化配置
在前面有一篇博客:Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发,我们在新增的时候留了一个问题,就是新增成功后,主键ID是一个很长串的内容. 我们更想要的是按照 ...