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











  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江姐vior

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值