利用selenium实时监测交大经管学院前沿讲座更新状态_20200527_

利用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)











猜你喜欢

转载自blog.csdn.net/weixin_45590329/article/details/106366560