Python自动化实现web页面UI差异对比

简介: 以自动化或工具的方式实现页面UI与标准UI图对比并输出可视结果

需求与实现:


需求:以自动化或工具的方式实现页面UI与标准UI图对比并输出可视结果


实现:


目前实现:


  1. 可将站点与标准UI图对比
  2. 可将两站点对比
  3. 可将两UI图对比


可应用的实际场景:


  1. 站点迁移,对比两个站点页面
  2. 版本迭代,前后UI对比
  3. 实际站点页面与标准UI图对比
  4. 可通过Appnium或Airtest应用到移动端页面对比


相关技术:


ImageChops :


主要包括对图片的算术运算,叫做通道运算(channel operations)。可以用于多种途径,包括一些特效制作,图片整合,算数绘图等等方面。这里用到了该模块的切换图片位深 功能以及图片对比功能;


Selenium:


结合webdriver 进行浏览器驱动,实现 web端登录->页面跳转->html页面在线保存为图片 整体流程;

效果展示:


Web页面自动截取为图片:


image.png

webnew.png:

image.png


页面与标准ui图对比:


差异数值获取:


image.png

差异图获取:


完全一致:

image.png

差异时:

image.png


web界面对比图:

image.png

image.png

web差异图:

image.png

手机界面对比图:

image.gifimage.png

image.png

手机界面差异图:

image.png

注:对比手机ui图时,上方状态栏时间或其他部分的无效差异,可以通过截取指定区域进行规避。


主要方法解析:


ImageChopsPic


def compare_images(path_one, path_two, diff_save_location):
    """
    比较图片,如果有不同则生成展示不同的图片
    @参数一: path_one: 第一张图片的路径
    @参数二: path_two: 第二张图片的路径
    @参数三: diff_save_location: 差异图片的保存路径
    """
    image_one = Image.open(path_one)
    image_two = Image.open(path_two)
    try:
        diff = ImageChops.difference(image_one, image_two)
        if diff.getbbox() is None:
            # 图片间没有任何不同则直接退出
            print(image_one, image_two, "对比图片完全相同!")
        else:
            print("差异图保存为:", diff_save_location)
            diff.save(diff_save_location)
    except ValueError as e:
        text = (" 当前图片大小或位深不一致 ")
        print("【{0}】{1}".format(e, text))
# 由于模块限制需要强制转换图片位深为'RGB:24'保证可识别且位深一致
def picture(path_change_bf, path_change_af):
    img = Image.open(path_change_bf).convert('RGB')
    # 输出当前图片位深
    print(img.getbands())
    img.save(path_change_af)
    print("位深已强制转换为 RGB:24")


ImageChopsValues


# 输出当前对比图片的差异值,数值越大表明图片差异越大,无位深识别限制
def image_contrast(img1, img2):
     image1 = Image.open(img1)
    image2 = Image.open(img2)
    h1 = image1.histogram()
    h2 = image2.histogram()
    result = math.sqrt(reduce(operator.add, list(map(lambda a, b: (a - b) ** 2, h1, h2))) / len(h1))
    return result


ChangPic


""" 
批量改变目录下图片位深 ,保存到新的目录下
    函数解释:
    path :图片存放的路径
    newpath :转化完成后,存放的路径
    convert :需要更改成那一种为深度的图片的格式
"""
def picture(path, newpath):
     files = os.listdir(path)
    for i in files:
        files = os.path.join(path, i)
        img = Image.open(files).convert('RGB')
        dirpath = newpath
        file_name, file_extend = os.path.splitext(i)
        dst = os.path.join(os.path.abspath(dirpath), file_name + '.png')
        img.save(dst)
        print("已将",i,"强制转为RGB格式")


WebToPic


# 截取网页照片函数
def screen_shot(url, png_name):
    brower = webdriver.Chrome()
    # 使用get()方法,打开指定页面。
    brower.get(url)
    # 设置浏览器全屏显示
    brower.maximize_window()
    time.sleep(1)
    # 获取登录tab并点击
    gofor = brower.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div/div/div[2]/div[1]/div/div[1]/div/div/div/div/div[3]')
    gofor.click()
    time.sleep(1)
    # 获取用户名输入框并输入
    name = brower.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div/div/div[2]/div[1]/div/div[2]/div[2]/div/div/div[2]/form/input[1]')
    name.send_keys("13120210916")
    # 获取密码输入框并输入
    password = brower.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div/div/div[2]/div[1]/div/div[2]/div[2]/div/div/div[2]/form/input[2]')
    password.send_keys("hly12345")
    # 获取登录按钮并点击
    login_button = brower.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div/div/div[2]/div[1]/div/div[2]/div[2]/div/div/button')
    login_button.click()
    time.sleep(1)
    # 打开目标页
    brower.get(url)
    time.sleep(2)
    # 使用save_screenshot将浏览器正文部分截图,即使正文本分无法一页显示完全,save_screenshot也可以完全截图
    brower.save_screenshot(png_name)
    # 关闭浏览器
    brower.close()

附:


关于Pillow库(ImageChops)的详细文档:


https://pillow.readthedocs.io/en/latest/index.html


关于图片 位深 的解释:


https://blog.csdn.net/WoHongG/article/details/84074057

https://blog.csdn.net/weixin_39190382/article/details/105917690


关于ImageChops功能使用的注意事项:


  1. 对比图 位深需小于等于24(RGB)
  2. 强制转换 位深功能,需原对比图 位深相等,否则会出现像素点错位导致对比误差
  3. 无效对比区域可以通过截取功能来规避
目录
打赏
0
0
0
0
15
分享
相关文章
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
166 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
分析http.client与requests在Python中的性能差异并优化。
合理地选择 `http.client`和 `requests`库以及在此基础上优化代码,可以帮助你的Python网络编程更加顺利,无论是在性能还是在易用性上。我们通常推荐使用 `requests`库,因为它的易用性。对于需要大量详细控制的任务,或者对性能有严格要求的情况,可以考虑使用 `http.client`库。同时,不断优化并管理员连接、设定合理超时和重试都是提高网络访问效率和稳定性的好方式。
88 19
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
如何避免Python爬虫重复抓取相同页面?
如何避免Python爬虫重复抓取相同页面?
|
10月前
|
Python办公自动化:删除任意页数pdf页面
Python办公自动化:删除任意页数pdf页面
247 2
Python办公自动化:删除任意页数pdf页面
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
169 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
UI-TARS 是字节跳动推出的新一代原生图形用户界面(GUI)代理模型,支持跨平台自动化交互,具备强大的感知、推理、行动和记忆能力,能够通过自然语言指令完成复杂任务。
1925 16
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
432 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9月前
|
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
166 3

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问