zoukankan      html  css  js  c++  java
  • Python实现自动签到(二)

    摘要

    上篇文章介绍如何通过Python+selenium+webdriver实现网页自动登陆,本篇介绍如何解析签到的日志文件以及判断签到是否成功发送邮件。

    环境准备

    • Python 3.8.3 + Pycharm
    • 签到日志文件 执行日志.log

    执行日志.log内容格式如下:

    2020-09-22 Tuesday 09:05:33  def_logging.py : INFO  xxxx开始
    2020-09-22 Tuesday 09:05:55  def_logging.py : INFO  签到成功
    2020-09-22 Tuesday 09:05:58  def_logging.py : INFO  xxxx结束
    2020-09-22 Tuesday 09:05:58  def_logging.py : INFO  xx开始
    2020-09-22 Tuesday 09:06:25  def_logging.py : INFO  签到成功
    2020-09-22 Tuesday 09:06:27  def_logging.py : INFO  xx结束
    2020-09-22 Tuesday 09:06:27  def_logging.py : INFO  xxx开始
    2020-09-22 Tuesday 09:06:59  def_logging.py : INFO  签到成功
    2020-09-22 Tuesday 09:07:03  def_logging.py : INFO  xxx结束
    

    实现逻辑

    日志关键信息提取

    1.每次日志为格式化输出,每天输出9行,读取最后9行日志信息
    2.每3行日志为一个分割节点
    3.根据每行日志格式,提取最后一个关键字及"xxxx开始","签到成功"类似信息
    4.匹配每3行中的第2行作为签到是否成功的标识

    邮件发送提示

    1.引入发送邮件的相关模块和包
    2.定义发送邮件的发送方和接收方
    3.定义邮件的发送内容和发送邮件的时机(有签到失败的情况发送)

    代码部分

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from email import encoders
    from email.header import Header
    from email.mime.text import MIMEText
    from email.utils import parseaddr, formataddr
    import smtplib
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))
    
    fo = open('执行日志.log','r')
    lines = fo.readlines()
    # 截取最后9行日志信息
    lines = lines[-1:-10:-1]
    lines.reverse()
    i = 1
    # seng_flag 决定是否发送邮件  send_msg发送邮件的内容
    seng_flag = False
    send_msg = ''
    for line in lines:
        line = line.strip()
        if i == 2:
            send_msg = send_msg + ':' + line.split()[6] + '
    '
            if line.split()[6] == '签到失败':
                seng_flag = True
        elif i == 3:
            i = 0
        else:
            send_msg = send_msg + line.split()[6]
        i += 1
    # 关闭文件
    fo.close()
    
    from_addr = 'xxxxxxx@qq.com'
    password = 'xxxxxxxxxx'
    to_addr = 'xxxxxxx@qq.com'
    smtp_server = 'smtp.qq.com'
    msg = MIMEText(send_msg, 'plain', 'utf-8')
    msg['From'] = _format_addr('Administrator <%s>' % from_addr)
    msg['To'] = _format_addr('QQ <%s>' % to_addr)
    msg['Subject'] = Header('自动签到', 'utf-8').encode()
    if seng_flag:
        server = smtplib.SMTP(smtp_server, 25)
        server.set_debuglevel(1)
        server.login(from_addr, password)
        server.sendmail(from_addr, [to_addr], msg.as_string())
        server.quit()
    
  • 相关阅读:
    Android sqlite日期存储
    Ubuntu10.04中间Leach协议一键安装
    Chapter 1 Securing Your Server and Network(1):选择SQL Server业务经理
    lua迭代器和仿制药for
    设定值范围+区间覆盖
    新手可以学习cocos2dx 3.0 组态(两)
    王立平--string.Empty
    Javascript操作阵列
    Dojo仪表板
    时间复杂度
  • 原文地址:https://www.cnblogs.com/bicewow/p/13710360.html
Copyright © 2011-2022 走看看