简要介绍一下要实现的功能。

在特殊时期,领导要求监控全校主要网站有没有被篡改,手动浏览太二,python实现每分钟自动检测几百个网页是否有变化,如果有变化就推送一条消息到微信群里。

主要方法:

本来想着每分钟保存一个页面到本地,然后和一分钟前保存的页面做对比,这样效率低且浪费资源。上网查了发现可以通过md5加密算法把页面加密成一个32位的字符串,每次对比字符串是否一致即可。具体原理不再赘述,可以参考https://blog.csdn.net/qq_28168421/article/details/82922071

关于微信推送消息,网上查到的itchat模块,试了觉得不安全,而且实测非常不稳定,掉线情况严重,链接https://blog.csdn.net/idealcitier/article/details/78503743,有兴趣的同学可以研究。
我这里用一种笨办法,利用selenium控制火狐浏览器,扫码登陆网页版qq,找到页面文本框元素,发送内容和回车键。需要用到python里selenium火狐浏览器驱动甚至pip的安装和使用方法请自行查找。

上代码:

第一个文件:monitor.py (代码主要来自https://blog.csdn.net/qq_28168421/article/details/82922071对比md5值部分稍做了修改。)
这里图懒省事,直接把这整个文件放到一个函数里供主程序调用。程序末尾会return有变化的网站链接。
注:只能监控静态页面,动态页面无法使用。

def fuckweb():import osimport hashlibimport urllib.requestimport jsonimport codecsimport sslssl._create_default_https_context = ssl._create_unverified_context#输入网址site = [
'http://www.tsinghua.edu.cn/publish/thu2018/index.html',
'https://www.pku.edu.cn/',
'http://www.fudan.edu.cn/2016/index.html/',
'http://www15.zzu.edu.cn/',
]#检查json档案是否存在,若没有就创建一个try:my_file = open('sitechange.json')except IOError:data = {}with open('sitechange.json','w') as outfile:json.dump(data, outfile, ensure_ascii = False)#开启json档案,读入资料with open("sitechange.json") as infile:data = infile.read()local_data = json.loads(data)#检查json档案中是否有相关网址记录,没有则建立一个for i in range(len(site)):if site[i] not in local_data:local_data[site[i]] = ""#若用户删除网址记录,则更新json档案temp = local_data.copy()for i in local_data.keys():if i not in site:temp.pop(i)local_data = tempreback = []#读入相关网址,并找出琦杂凑值,与已存储的杂凑值进行对比for i in range(len(site)):try:remote_data = urllib.request.urlopen(site[i]).read()remote_hash = hashlib.md5(remote_data).hexdigest()except:  #如果获取不到网站,比如404或根本打不开,抛出异常。remote_hash = '00000000'if remote_hash != local_data[site[i]]:reback.append(site[i])local_data[site[i]] = remote_hash#把更新的杂凑值写回json档with open('sitechange.json', 'w') as outfile:json.dump(local_data, outfile, ensure_ascii = False)return reback

第二个文件:main.py (代码主要自己瞎编的)
webdriver模块自动打开火狐浏览器,人工手动扫码登陆微信点开一个要发送消息的对话框,之后每分钟会调取第一个文件中的函数检测页面有没有变化,如果有就返回过来,通过浏览器发送到微信群里。每循环一次,将日志print到cmd上。

import time
import importlib
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
import string
import monitor#打开火狐浏览器,打开wx.qq.com,留15s时间来扫码登陆
bo = webdriver.Firefox()
bo.get('https://wx.qq.com/')
time.sleep(15)
d = '[]'#循环开始,这里可以根据需求设置循环次数
for x in range(0,18720):if x == 0:ipa = zmonitor.fuckweb() #第一次循环不做汇报。else:ipa = monitor.fuckweb()ipa = str(ipa)ipa = ipa.translate(str.maketrans("'"," ")) #将'都转换成空格d = ipaif ipa != '[]':a = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #获取时间ipb = ipa + '该网站于' + a + '有更新'bo.find_element_by_id('editArea').send_keys(ipb) #定位微信网页文本输入区域,发送消息上去bo.find_element_by_id('editArea').send_keys(Keys.ENTER) #定位微信网页文本输入区域,发送回车键x += 1# 以下内容用于记录日志,懒省事直接print到cmd。也可以写入日志文件。b = 18720-xti = str(x)ti2 = str(b)a = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())if d == '[]':final = a + '完成第' + ti + '次循环,未发现问题,剩余' + ti2 + '次'print (final)else:final = a + '完成第' + ti + '次循环,剩余' + ti2 + '次 发现问题如下!!\n' + d + '该网站于' + a + '有更新'print (final)#时间间隔60stime.sleep(60)

实际运行效果如下:



本文完。可加qq交流402243155

监控网页变化,实时推送微信消息相关推荐

  1. python自动推送消息_使用Python制作自动推送微信消息提醒的备忘录功能

    日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时,导致错过的尴尬.如果有一款小工具,可以及时提醒,而不用再主动去查备忘 ...

  2. Python定时任务推送微信消息

    需要做个定时推送微信消息,我去研究了一下,研究半天发现微信关了网页api之后两眼一抹黑完全不知道咋玩,幸好有大佬做了个微信推送接口,虽然像个公众号,但领导说省了自己注册,所以就这么简单粗暴啦. 这个功 ...

  3. python自动推送消息_用Python设计一个可以自动推送微信消息提醒的备忘录

    请关注微信公众号:金融数学 FinancialMathematics日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时, ...

  4. 实时填报推送微信消息及审核(帆软报表)

    在微信集成完成的情况下(实时推送消息或者审核) 1.服务器和本机都安装模板消息事件(插件)(需要注意HTML5插件和微信管理插件以及模板消息事件插件的版本) 2.在按钮控件的属性里面的事件编辑下或者填 ...

  5. php 公众号队列推送,微信消息推送

    微信消息推送 微信公众平台和小程序虽然都是腾讯开发,但是其是俩个独立的平台,包括账号也是独立存在,所以小程序和公众平台不可以使用同一个账号注册使用. 因是俩个平台,所以微信公众平台的用户openId和 ...

  6. ThinkPHP 微信授权web网页 公众号推送模版消息

    申请公众平台 和 公众号 各种参数填写完成!!! 我这里主要讲的是代码 第一步:前端代码 //这里的代码 对应下面的 html 代码 public function index(){$id = $th ...

  7. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...

    我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...

  8. java推送微信消息换行_微信公众号开发被动回复用户消息,回复内容Content使用了\n换行符还是没有换行...

    使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架 需求:在微信公众号开发时,需要实现自动回复,即被关注回复.收到消息回复.关键词回复 发现问题: ...

  9. uniapp开发小程序推送微信消息

    效果 //处理自己的逻辑freeClick() {this.getPushTempletes(()=> {this.$u.post('/fkmpPay/getExperiencePackage' ...

  10. ASP.NET Core SignalR实时推送配置,业务层实时推送SignalR消息

    web框架版本:.NET 6 不需要安装nuget有关signalr的包 微软参考文档: https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/ ...

最新文章

  1. 文档型数据库列一般都是弱项
  2. Meshlab和CloudCompare截图时去除“旋转圈”
  3. python爬取网页新闻_Python爬取新闻网数据
  4. python模型保存save_浅谈keras保存模型中的save()和save_weights()区别
  5. php post aspx,PHP模拟POST aspx页面不成功
  6. 【转】Windows系统中ckplayer视频边下边放,视频转码mp4及last atom in file was not a moov atom问题...
  7. linux系统oracle监听启动,linux下启动与关闭oracle监听与实例
  8. JavaScript的Forms验证-Parsley.js
  9. windows下安装Keras(CPU版)
  10. java面向接口编程
  11. python colorbar刻度_python-如何添加Matplotlib Colorbar刻度
  12. XFTP中文目录乱码
  13. php中如何获得当前周数,PHP中根据输入的周数获取到该周的日期范围
  14. C#入门4——税收计算
  15. 自己定义微信图文模板注意事项整理
  16. 环境变量的用户变量与系统变量的区别
  17. linux+gif+编辑,从Ubuntu的命令行创建和编辑动画GIF | MOS86
  18. html----->表单进阶------>字段集
  19. xwiki开发指南1-使用XWiki创建FAQ应用
  20. 从网上购物者角度看购物商城广告的推广模式

热门文章

  1. c语言程序设计银行存取款管理系统,银行存取款管理系统设计
  2. 王道训练营3月13日
  3. 异常详细信息: System.ComponentModel.Win32Exception: 信号灯超时时间已到
  4. 9080端口对应服务器文件位置,Filenet更改端口-更改9080 端口到 80 端口
  5. c语言中取反位运算的作用,C语言位运算符及作用与或异或取反左移和右移
  6. js之数组打印看到长度和实际长度不同(浅拷贝)
  7. javaweb基于SSM酒店入住管理系统设计与实现(含毕业论文、程序设计及数据库文件)
  8. B2B网站平台建设:优势、功能、模块三大方向解析
  9. 【南航计算机网络实验】Ping 命令的实现
  10. 如何下载官方windows10的ios镜像文件