图像识别在监控中的应用

在上一篇文章中我们分析了图像识别和传统ui自动化的区别,在今天这篇文章中我们一起学习一下图像识别在网站监控中的应用。

在以往的监控中,我们对web项目中的监控有很多种,其中最常见的就是接口监控而且这种监控的收益最高,而且最容易发现问题。但是对于一个大型的网站系统来说,从服务端到前端展示有很多层:内网 VIP、CDN 等。但是接口的监控并不能准确地反应用户看到的前端页面状态,,比如:数据库层,数据异常、空白页面等。这个时候就需要我们全方位进行监控,比如css,jss的加载异常监控,DOM的展示是否正常这些可以通过自动化来实现部分监控。但是这些还是不能从用户角度进行全面监控,所以今天我们就来分享一种页面级别的监控。

需要解决的几个问题:

1、       模拟用户打开要监控的网站(Phantomjs 和webdriver)

2、       对要监控的网站进行打开并截图

3、       如何找到本次的访问与上次问题的差异

4、       如果评估一个相对差异值进行确定是否有问题

关于技术的选型:

Selenium

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。

Selenium可以根据我们的指令,让浏览器自动加载页面,获取需要的页面,甚至页面截屏,或者判断网站上某些动作是否发生。

Selenium自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所有我们而已用一个叫PhantomJS的工具代替真实的浏览器。

可以从PyPI网站下载Selenium库http://pypi.python.org/simple/sulenium,也可以用第三方管理器pip命令安装:pip install selenium
Selenium官方参考文档:http://selenium-python.readthedocs.io/index.html

PhantomJS

PhantomJS是一个基于Webkit的"无界面"(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器更高效。

如果我们把Selenium和PhantomJS结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理JavaScript、Cookie、headers,以及任何我们真实用户需要做的事情。

注意:PhantomJS只能从它的网站(http://phantomjs.org/download.html)下载。因为PhantomJS是一个功能完善(虽然无界面)的浏览器而非一个Python库,所以它不需要像Python的其它库一样安装,但我们可以通过Selenium调用PhantomJS来直接使用
PhantomsJS官方才考文档:http://phantomjs.org/documention

考虑到监控主要任务在监控不在测试。系统并不需要太多考虑兼容性,而且监控功能相对单一,主要对页面进行功能上的回归测试和截图,所以选择了Selenium+PhantomJS

图像对比

关于图像对比我这边简单实用的是OpenCV这个也比较成熟,而且文档比较丰富上手容易,而且也满足了当前的需求刚好支持的语言也比较符合。所以就直接实用OpenCV,关于改软件的安装这里就不做介绍了,下面简单介绍一下我们常用的使用方法(部分参考网上文档)

现在OpenCV for Python就是通过NumPy进行绑定的。所以在使用时必须掌握一些NumPy的相关知识!

图像就是一个矩阵,在OpenCV for Python中,图像就是NumPy中的数组!

如果读取图像首先要导入OpenCV包,方法为:

1. import cv2  

读取并显示图像

在Python中不需要声明变量,所以也就不需要C++中的cv::Mat xxxxx了。只需这样:

1. img = cv2.imread("D:\cat.jpg")  

OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。更详细的请参考OpenCV的参考文档。

接着创建一个窗口

1. cv2.namedWindow("Image")  

然后在窗口中显示图像

1. cv2.imshow("Image", img)  

最后还要添上一句:

1. cv2.waitKey (0)  

如果不添最后一句,在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过。、

关于图像对比的方法参考了网上的部分代码:

部分的业务逻辑代码如下:

结果展示

通过大量的数据计算如果前后两次请求的相识度在70%以上网站结构基本上没有变化(之所以是70,因为每次请求的新闻内容都是不一样的所以导致相识度在70%+)

 

猜你喜欢

转载自blog.csdn.net/gzh0222/article/details/80811573