利用selenium实时监测交大经管学院前沿讲座更新状态。
from selenium import webdriver # 导入selenium自动化测试模块
from lxml import html # 导入xpath解析模块
import time # 导入时间模块
etree = html.etree # 实例化etree
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import pandas as pd
import os
class LectureReminder():
"""交大讲座微信提醒"""
def __init__(self,time_sleep):
ch_op = Options() # 创建一个参数对象,用来控制chrome以无界面模式打开
ch_op.add_argument('--headless') # 设置谷歌浏览器的页面无可视化
ch_op.add_argument('--disable-gpu')
ch_op.add_argument('blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
self.ch_op=ch_op
self.time_sleep=time_sleep#多少秒以后运行一次
self.status=True#决定整个程序是否继续运行,如果为True则运行,如果为False则退出
self.info_differences=False#新旧讲座信息是否不同。如果不同即True,将触发打开微信页面并发送消息的提示
self.print_statu='无新讲座出现'#表示目前讲座更新状态,出现新讲座将更新为‘出现新讲座啦!’
self.open_html()
self.get_info()
self.compare_info()
def open_html(self):
"""打开讲座网页页面"""
self.browser = webdriver.Chrome(chrome_options=self.ch_op) # 创建chrome浏览器控制器,
self.browser.implicitly_wait(10) # 隐式等待:在查找所有元素时,如果尚未被加载,则等10秒
self.browser.get('http://sem.bjtu.edu.cn/') # 浏览器控制器访问网页
time.sleep(2) # 延迟5秒
def get_info(self):
"""获得讲座信息"""
text_s = self.browser.page_source # 将获取的页面转化成text类型
#print(text_s) # 此时仍就是不包含信息的代码
tree = etree.HTML(text_s) # 实例化xpath
li_s = tree.xpath('//li/ul[@class="activityTrailer_list clearfix"]/li') # 进行第一次解析,获取
# 将讲座信息提取出来
self.info_s = []
for li in li_s:
try:
# li=li_s[2]
try:
year = li.xpath('div[@class="activityTrailer_time"]//text()')[0] # 年份
except:
year = ''
try:
try:
date = li.xpath('div[@class="activityTrailer_date "]//text()')[0] # 日期
except:
date = li.xpath('div[@class="activityTrailer_date date_out"]//text()')[0] # 日期
except:
date = ''
try:
name = li.xpath('div/a[@target="_blank"]//text()')[0] # 名称
except:
name = ''
try:
time = li.xpath('div/div[@class ="a_clock"]//text()')[0] # 时分
except:
time = ''
try:
location = li.xpath('div/div[@class="a_place"]//text()')[0] # 地点
except:
location = ''
info = [year, date, name, time, location]
self.info_s.append(info)
except:
continue
self.info_s=self.info_s[:5]
self.browser.quit()
def reopen_html(self):
"""重新打开网页"""
self.open_html()
self.get_info()
def compare_info(self):
"""经过固定时间(秒),将新旧讲座信息对比,如果不同,则做出反映"""
while True:
self.info_s_old=self.info_s#先将旧信息另外赋值用于比对
time.sleep(self.time_sleep)
self.reopen_html()
if self.info_s_old[0]!=self.info_s[0]:
self.send_message()
else:
print('目前讲座是:\n')
self.show_info()
print(self.print_statu)
print(time.ctime(time.time()))
def send_message(self):
"""当新旧信息不同时,将触发此函数,向微信发送消息"""
self.show_info()
self.print_statu='新讲座出现啦'
def show_info(self):
"""将获取的信息打印出来"""
for info in self.info_s:
info_text=info[0]+info[1]+info[2]+info[3]
print(info_text)
if __name__=='__main__':
lecture=LectureReminder(1800)