前言
相信大家在弄 ui 自动化时会遇到判断控件当前状态的需求,废话不说了,看下图,某订座(场)软件
需求分析
选择可预订的座(场)位,然后提交,走下支付流程
可预订状态的分析
可预订的座位和不可预订的座位 ID 什么鬼的都一样
还好两种状态的颜色不一样,一个灰色一个绿色,形成了鲜明对比,这样我们可以根据颜色来判断控件是不是可以预订的
代码实现
1.先使用 PIL 中 getpixel 方法获取目标状态的 RGBA 值,得到可预订状态的颜色(绿色)值为 (106, 212, 73, 255)
2.用 ID 查找方法,找到所有的座位
3.截取当前屏幕的图片,以 png 格式保存至本地
4.使用 PIL 打开该图片
5.用 location.get() 获取控件起点,再用 size.get() 获取长和宽,算出单个控件的左上角坐和右下角坐标
6.根据控件坐标使用 PIL 的 crop 截取控件的截图,然后使用 PIL 的 getpixel 获取控件某个点的像素值
7.获取到的像素值再与目标值对比就OK了
fix_rgba = (106, 212, 73, 255)
els = dr.find_elements_by_id("ID")
dr.get_screenshot_as_png("F:\\temp\\temp.png")
pig = Image.open("F:\\temp\\temp.png")
for el in els:
x1 = el.location.get("x")
y1 = el.location.get("y")
h = el.size.get("height")
w = el.size.get("width")
x2 = x1 + w
y2 = y1 + h
el_img = pig.crop(box=(x1, y1, x2, y2))
el_rgba = el_img.getpixel((54, 32))
if el_rgba == fix_rgba:
el.click()
PIL 库安装
PIL 官网 [http://pillow.readthedocs.org/en/3.0.x/index.html]
快速入门 [http://pillow-cn.readthedocs.org/zh_CN/latest/handbook/tutorial.html#]
安装方法
pip install Pillow