码迷,mamicode.com
首页 > Web开发 > 详细

webdriver高级应用- 精确比较页面截图图片

时间:2018-04-04 14:56:36      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:alc   return   path   post   odi   启动   size   pil   abs   

判断两张图是否完全一致,如果存在任何不一致,会认为图片不匹配,代码如下:

#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 xrange(0, w, pw) for j in xrange(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()
        # 启动Firefox浏览器
        self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")

    def test_ImageComparison(self):
        #url = "http://doc.outofmemory.cn/python/webpy-cookbook/"
        url = "http://www.sohu.com"
        # 访问搜狗首页
        self.driver.get(url)
        time.sleep(3)
        # 截取第一次访问搜狗首页的图片,并保存在本地
        self.driver.save_screenshot("e:\\sogou1.png")
        self.driver.get(url)
        time.sleep(3)
        # 截取第二次访问搜狗首页的图片,并保存在本地
        self.driver.save_screenshot("e:\\sogou2.png")
        # 打印两张截图比对后相似度,100表示完全匹配
        print self.IC.calc_similar_by_path(e:\\sogou1.png,e:\\sogou2.png) * 100

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

if __name__ == __main__:
    unittest.main()

 

webdriver高级应用- 精确比较页面截图图片

标签:alc   return   path   post   odi   启动   size   pil   abs   

原文地址:https://www.cnblogs.com/qingqing-919/p/8716564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!