python +selenium 实现图片对比功能

#encoding=utf-8
from selenium import webdriver
import unittest, time
from PIL import Image

class ImageCompare(object):
    ‘‘‘
    本类实现了对两张图片通过像素比对的算法,获取文件的像素个数大小
    然后使用循环的方式将两张图片的所有项目进行一一对比,
    并计算比对结果的相似度的百分比
    ‘‘‘
    def make_regalur_image(self, img, size=(256, 256)):
        # 将图片尺寸强制重置为指定的size大小
        # 然后再将其转换成RGB值
        return img.resize(size).convert(‘RGB‘)

    def split_image(self, img, part_size=(64, 64)):
        # 将图片按给定大小切分
        w, h = img.size
        pw, ph = part_size
        assert w % pw == h % ph == 0
        return [img.crop((i, j, i + pw, j + ph)).copy()                 for i in range(0, w, pw) for j in range(0, h, ph)]

    def hist_similar(self, lh, rh):
        # 统计切分后每部分图片的相似度频率曲线
        assert len(lh) == len(rh)
        return sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r))                    for l, r in zip(lh, rh)) / len(lh)

    def calc_similar(self, li, ri):
        # 计算两张图片的相似度
        return sum(self.hist_similar(l.histogram(), r.histogram())            for l, r in zip(self.split_image(li), self.split_image(ri))) / 16.0

    def calc_similar_by_path(self, lf, rf):
        li, ri = self.make_regalur_image(Image.open(lf)),                  self.make_regalur_image(Image.open(rf))
        return self.calc_similar(li, ri)

class TestDemo(unittest.TestCase):

    def setUp(self):
        self.IC = ImageCompare()
        # 启动浏览器
        self.driver =webdriver.Chrome(executable_path="D:\\driver\\chromedriver")

    def test_ImageComparison(self):

        url="http://www.baidu.com"
		# 访问百度首页
        self.driver.get(url)
        time.sleep(3)
        # 截取第一次访问搜狗首页的图片,并保存在本地
        self.driver.save_screenshot("e:\\baidu1.png")
        self.driver.get(url)
        time.sleep(3)
        # 截取第二次访问搜狗首页的图片,并保存在本地
        self.driver.save_screenshot("e:\\baidu2.png")
        # 打印两张截图比对后相似度,100表示完全匹配
        print (self.IC.calc_similar_by_path(‘e:\\baidu1.png‘,‘e:\\baidu2.png‘) * 100)

    def tearDown(self):
        # 退出浏览器
        self.driver.quit()

if __name__ == ‘__main__‘:
    unittest.main()

  

原文地址:https://www.cnblogs.com/chongyou/p/12636556.html

时间: 2024-11-10 10:13:36

python +selenium 实现图片对比功能的相关文章

基于python+appium通过图片对比来做的UI自动化

1.python + appium +图片对比实现UI自动化:背景:当手机需要适配不同的语言时,测试过程中易出现因为语言不熟悉,导致UIbug被遗漏(例如setting中的描述性文字显示不完整等等问题)环境搭建:需使用模块PIL,Windows版本链接地址:http://pythonware.com/products/pil/ubuntu (使用16.04虚拟机):sudo apt-get install python-imaging安装过程遭遇Unable to acquire the dpk

python selenium 自动化测试图片识别1

本人纯野生测试猿一头,做了一年web 功能测试,测试了一年机顶盒,还是想做回老本行 ,自学了一段时间selenium ,学习过程中,遇到了网页中需要输入验证码的问题,网上查阅资料,依葫芦画瓢凑成(水平有限)了一段登陆网站挂课的脚本(亲测通过),现跟大家分享如下: 大神勿喷 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import timefrom P

Python + Selenium 主要实现的功能

selenium 技术 元素定位的几种方法 WebDriver API ,selenium IDE,selenium grid python 技术 函数.类.方法: 读写文件, unitest单元测试框架, HTMLTestRunner.py, 发邮件模块, 多线程技术等 原文地址:https://www.cnblogs.com/qianjinyan/p/11212357.html

移植MonkeyRunner的图片对比和获取子图功能的实现-UiAutomator/Robotium篇

根据前一篇文章<移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇>所述,因为Appium和MonkeyRunner有一个共同点--代码控制流程都是在客户端实现的.所以要把MonkeyRunner在PC端实现的图片比对和获取子图功能移植到同样是在PC端运行的Appium是很容易的事情,但是对于在服务器端运行的Robotium和UiAutomator就是另外一回事了. 因为在Android的sdk中,MonkeyRunner获取子图和图片比对需要用到的以下两个类是没有支持

【Mac + Python + Selenium】之获取验证码图片code并进行登录

初稿代码,可以忽略不计(自己留着看) #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/01/15 13:27 # @Author : zc # @File : 115test.py from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep from PIL import Image,Im

转 Python Selenium设计模式-POM

前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点.应用场景和核心思想有一定的理解和掌握. 为什么要用POM 基于python selenium2开始UI级自动化测试并不是多么艰巨的任务.只需要定位到元素,执行对应的操作即可.下面我们看一下这个简单的脚本实现百度搜索. from selenium import webdriver import time driver = webdriver.Firefox() driver.i

WEB自动化(Python+selenium)的API

在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                                                                                                     WEB自动化测试培训2 课程目的 一.Webdriver API 的使用 课程内容 1    控制浏览器 Selenium 主要提供的是操作页面上各

《一头扎进》系列之Python+Selenium框架实战篇4- 价值好几K的框架,呵!这个框架有点意思啊!!!

1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到base_page.py这个类文件,以后每个POM中的页面类,都继承这个基类,这样每个页面类都有基类的方法,这个我们会在这篇文章由宏哥实现. 2.项目层级结构 1. 上一篇中我们已经创建好了项目层级结构,具体项目层级结构如下图.这里不再赘述,相关文件也如下: 3. 定位和截图类封装 1. 在实现封装基类里

Python Selenium 文件上传(二)

今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python Selenium 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是如果通过saltstack 远程控制执行时,SendKeys就定位不到窗口了. 所以采用这种新的方式来实现文件上传功能,并完美的解决了这个问题. 具体操作步骤如下: 1.下载工具 AutoIt及使用 AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows