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

selenium,对于,颜色,处理,拓展 · 浏览次数 : 63

小编点评

**代码解析及处理:** ```python from selenium import webdriver from time import sleepdriver = webdriver.Chrome()driver.get('https://www.baidu.com') # 找到百度一下这个按钮元素 ele_baidu = driver.find_element('id', 'su') # 获取其css属性background-colorcolor 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颜色值 color = 'rgba(78, 110, 242, 1)' # 打印RGBA颜色值 print(Color.from_string(color).hex) # #4e6ef2 看看源码,它是怎么实现的 ``` **代码功能:** 1. 使用 `webdriver` 模块打开百度搜索页面。 2. 通过 `find_element` 方法找到百度一下按钮元素。 3. 通过 `value_of_css_property` 方法获取按钮的背景色值。 4. 使用 `Color.from_string` 方法将背景色值转换为 `Color` 类。 5. 打印颜色值和颜色类型。 **结果:** ``` rgba(78, 110, 242, 1) #4e6ef2 ``` **总结:** 代码使用 `selenium` 模块获取百度一下按钮的背景色,并将其转换为 `Color` 类,并打印颜色值和颜色类型。

正文

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中对于颜色的处理及拓展

Selenium中对于颜色的处理及拓展 获取百度一下按钮的背景色 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('https://www.baidu.com')

《最新出炉》系列初窥篇-Python+Playwright自动化测试-16-处理模态对话框弹窗

1.简介 我们在日常工作中,会经常遇到弹出警告框的问题,弹框无法绕过,必须处理才可以执行后续的测试,所以弹框处理也是我们必须掌握的一个知识。宏哥在java+selenium系列文章中介绍过这部分内容。那么,playwright对于弹框的处理是怎样的?是否比selenium更加简单呢?下面我们就来介绍

谈谈Selenium中的三种切换之alert

谈谈Selenium中的三种切换之alert 一、如何识别 识别方法:alert中的确定、取消、输入框无法用inspector定位到,当然还有一些特例。 alert分为三种 alert confirm prompt 分别对应3个js的命令(可在chrome的console面板中调试) alert('

谈谈Selenium中浏览器驱动的日志

谈谈Selenium中浏览器驱动的日志 来源于一位同学,“老师为啥firefox执行后会有日志文件,chrome没有呢?” 比对 你打开chrome浏览器 from selenium import webdriver driver = webdriver.Chrome() 这样是没有日志的 同样的代

解决HtmlUnit执行JS报错提示ScriptException

问题描述 HtmlUnit作为一款比Selenium更轻量的HeadLess的Java版本浏览器模拟器,不需要在服务器上安装部署浏览器及其Driver程序。 但是,众所周知,HtmlUnit对JS脚本的支持并不是很友好,GitHub中大部分的issue都和JS执行错误有关,作者也一直在升级JS En

一键自动化博客发布工具,用过的人都说好(cnblogs篇)

cnblogs和其他的博客平台相比会比较复杂,需要设置的项目也比较多一些,弄懂了cnblogs的实现方式,那么你应该对selenium的整个框架使用已经烂熟于心了。 除了正常的标题,内容,摘要之外,cnblogs还需要设置个人分类,合集,投稿选项,投稿至网站分类,tags标签等内容。 要填的东西比较

selenium结合tenacity的retry实现验证码失败重试

说在前面 验证码登录的demo后续可以单独讲解,VIP学员对这部分应该都是掌握的,此处不再赘述 本文假设了一个场景 你通过OCR识别的验证码是有一定的错误几率的 本文是通过识别后的验证码去加一个随机字符,如果取到的是''空字符则可能成功,否则必然不会成功 所涉及的python库 selenium d

Selenium CHANGELOG[最新版本4.12.0 23-8-29]

# Selenium CHANGELOG[持续更新] > 源文件 https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES > > 搬运工 > > 对重点版本做时间标注,具体时间点可以参考https://github.com/Selen

Selenium+2Captcha 自动化+验证码识别实战

> 本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解。内容涵盖Selenium的基础知识、验证码的分类、2Captcha服务的使用,以及通过实例进行的详细讲解,最后对实践进行总结和优化思考,为读者提供了一条完整的验证码破解实践路线图

玫瑰花变蚊子血,自动化无痕浏览器对比测试,新贵PlayWright Vs 老牌Selenium,基于Python3.10

也许每一个男子全都有过这样的两个女人,至少两个。娶了红玫瑰,久而久之,红的变了墙上的一抹蚊子血,白的还是床前明月光;娶了白玫瑰,白的便是衣服上沾的一粒饭黏子,红的却是心口上一颗朱砂痣。--张爱玲《红玫瑰与白玫瑰》 Selenium一直都是Python开源自动化浏览器工具的王者,但这两年微软开源的Pl