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
    
  • 稍作封装文章来源地址https://www.toymoban.com/news/detail-789261.html

    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中对于颜色的处理及拓展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium+python处理iframe切换

    selenium+python处理iframe切换有3种方法: 1、如果iframe有id或name,则可根据iframe的id或name切换。 2、把iframe当作页面元素,通过元素定位表达式进行切换。 3、将iframe存储到list中,然后根据ifrane的索引定位 (适合页面有多个iframe,且前两种方法无法使用)。 如果页面有多层ifram

    2024年02月11日
    浏览(42)
  • python+selenium尝试处理滑块验证

     效果如图:   处理思路: 1.打开滑动验证页面,这个用selenium一步一步走过去 2.将滑动验证码的整个图片保存下来 3.对图片的像素点进行分析,发现拼图处像素特征如下:   1).阴影起点处rgb的第一个值为0   2).阴影处的rgb三个值相加大部分小于某个临界值(minPix=400)   3).拼图阴影大

    2024年02月15日
    浏览(46)
  • Python + Selenium 处理浏览器Cookie

    工作中遇到这么一个场景:自动化测试登录的时候需要输入动态验证码,由于某些原因,需要从一个已登录的机器上,复制cookie过来,到自动化这边绕过登录。 浏览器的F12里复制出来的cookie内容是文本格式的: 这里需要把cookie文本处理为name和value格式的字典形式,这个是S

    2024年02月13日
    浏览(51)
  • python爬虫selenium被检测处理(适用淘宝登录)

    1.增加这个是防止检测是webdriver谷歌驱动调起的请求,通用大部分 2.修改chromedriver里面的内容: 用Notepad++打开chromedriver文件,查找  $cdc_  修改这个数值。 3.修改User-Agent的值,如果你长时间使用相同 的User-Agent:可能会被检测到加入黑名单, 这时候你修改User-Agent值就可能绕开

    2024年02月09日
    浏览(41)
  • Python+Selenium处理一闪而过的提示信息

    在做WEB自动化测试时,可能会遇到一闪而过的提示信息,使用Chrome开发者工具捕捉后马上消失了很是头疼,研究了一番解决了这个问题。 1. 打开Chrome开发者工具,点击Sources标签页,网页上操作出现互动提示后,点击步骤②的暂停按钮,这样提示信息就不会消失了 2. 再把鼠标

    2024年02月13日
    浏览(45)
  • Python利用Selenium实现弹出框的处理

    现如今经常出现在网页上的基于 JavaScript 实现的弹出框有三种,分别是  alert、confirm、prompt  。该章节主要是学习如何利用 selenium 处理这三种弹出框。奥利给,冲! JavaScript的三种对话框是通过调用 \\\"window对象\\\" 的三个方法 \\\"alert()\\\"、\\\"confirm()\\\" 、\\\"prompt()\\\" 来获得,我们可以利用这

    2024年02月01日
    浏览(44)
  • Selenium+Python自动化测试之验证码处理

    验证码识别技术 (很难达到100%) 添加Cookie (*****五星推荐) 逻辑方式: 1:打开验证码所在页面,截图。获取验证码元素坐标,剪切出验证码图片,识别 以途牛为例 代码: 步骤: 1:获取指定cookie: get_cookie(cookie名) 2:获取本网站所有本地cookies: get_cookies() 3:添加cookie:ad

    2024年02月04日
    浏览(41)
  • python-selenium-框架定位的处理frame

    Frame框架是Html框架结构中一种布局格式,共有三种形式:frameset、frame、iframe frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架 页面比较复杂,页面套页面,定位第几层窗口,找元素时,要先看元素在哪个框架,找到框架在定位元素。 框架也是某一个具

    2024年02月11日
    浏览(34)
  • selenium+python:clear不生效时,处理清空input框内容

    做selenium自动化时,有时想清楚input框内的内容,但是使用clear却不生效,可以采用其他思路代替clear,就是使用键盘输入ctrl+a,再delete,这样就可以了

    2024年02月05日
    浏览(33)
  • [python] 使用selenium+pywinauto模块处理弹窗中的图片/文件上传

    在我们使用selenium模块操作浏览器完成一些任务时经常会遇到一些需要上传文件/图片的弹窗。例如,我们在编辑发送邮件时需要上传文件: 这些弹窗属于系统页面而非浏览器页面,所以只使用selenium模块是定位不到弹窗页面中的元素的,从而也就无法对元素进行操作完成上传

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包