东南大学每日上报健康申报小助手

东南大学每日上报健康申报小助手

免责声明:本脚本仅为个人为学习python之目的所编写,使用该脚本造成的一切后果均由使用者承担。 本人坚持每日按时手动进行疫情上报并提倡同学们每日按时手动进行疫情上报,配合学校进行好疫情防控。

Intro

疫情期,各高校行每日上报制,然则上报多矫,正所谓金玉其外,败絮其中。君不见体温350°无人闻,折让导员趋学生。导员何错?学生何错?笑。

小助手基于selenium,Gay站上已有许多类似地高校填报小助手,原理都是类似的QWQ。使用Driver控制浏览器,selenium填写信息request到server。

本小助手提供的功能:

  • 持续自动填报
  • 多人填报
  • 随机数防止检测

小助手默认在服务器环境下运行,保证py文件在执行后需要一直开启。如果没有服务器支持,也可以用win/mac/linux自带的定时执行程序功能。

使用说明

  1. 下载最新Chrome浏览器,并查看版本。
    https://npm.taobao.org/mirrors/chromedriver/处选择对应浏览器版本的Chromedriver文件下载。
  2. 安装selenium包。
  3. 将Chromedriver文件命名为Chromedriver放到py文件统一文件夹下,修改config为自己的账号密码,如果只想填报自己的信息,删掉其他user即可。
  4. 运行py文件。

呆码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import os
import json
import random
import time
import datetime
import traceback

def wait_element_by_class_name(drv, class_name, timeout):
    WebDriverWait(drv, timeout).until(lambda d: d.find_element_by_class_name(class_name))

def find_element_by_class_placeholder_keyword(drv, class_name, keyword):
    elements = drv.find_elements_by_class_name(class_name)
    for element in elements:
        if element.get_attribute('placeholder').find(keyword) >= 0:  
            return element
    return None

def find_element_by_class_keyword(drv, class_name, keyword):
    elements = drv.find_elements_by_class_name(class_name)
    for element in elements:
        if element.text.find(keyword) >= 0:  
            return element
    return None

def picker_click(drv, column, cnt):
    pickers = column.find_elements_by_class_name('mt-picker-column-item') 
    drv.execute_script("arguments[0].scrollIntoView();", pickers[cnt]) 
    pickers[cnt].click()  

def check_todays_report(drv):
    items = drv.find_elements_by_class_name('res-list') 
    latest = find_element_by_class_keyword(items[0], 'res-item-ele', '申请时间').text  
    latest = latest[latest.find(' ') + 1: latest.rfind(' ')]  
    latest_date = datetime.datetime.strptime(latest, '%Y-%m-%d').date() 

    if latest_date == date_of_today.date():  
        return True

    return False

def login(drv, cfg):
    username_input = drv.find_element_by_id('username') 
    password_input = drv.find_element_by_id('password') 
    login_button = find_element_by_class_keyword(drv, 'auth_login_btn', '登录') 
    if login_button is None:
        login_button = find_element_by_class_keyword(drv, 'auth_login_btn', 'Sign in') 
    username_input.send_keys(cfg['username'])
    password_input.send_keys(cfg['password'])
    login_button.click()  # 登录账户

def daily_report(drv, cfg):
    wait_element_by_class_name(drv, 'mint-loadmore-top', 30) 
    time.sleep(random.randint(1,3))
    add_btn = drv.find_element_by_xpath('//*[@id="app"]/div/div[1]/button[1]') 
    if add_btn.text == '退出':
        return
    else:
        add_btn.click() 
        time.sleep(random.randint(1,3)) 
    temp_input = find_element_by_class_placeholder_keyword(drv, 'mint-field-core', '请输入当天晨检体温')
    drv.execute_script("arguments[0].scrollIntoView();", temp_input) 
    temp_input.click() 
    temp = random.randint(34,35)  
    temp_input.send_keys(str(temp)) 
    time.sleep(random.randint(1,3))
    find_element_by_class_keyword(drv, 'mint-button--large', '确认并提交').click() 
    wait_element_by_class_name(drv, 'mint-msgbox-confirm', 5) 
    time.sleep(random.randint(1,3))
    find_element_by_class_keyword(drv, 'mint-msgbox-confirm', '确定').click()  

def run(profile):
    driver = webdriver.Chrome(executable_path="Chromedriver.exe")
    try:
        driver.get(daily_report_url)
        login(driver, profile)
        daily_report(driver, profile)
    except Exception:
        exception = traceback.format_exc()
    finally:
        time.sleep(random.randint(3,4))
        driver.quit()  

for i in range(1000000):
    date_of_today = datetime.datetime.now()
    daily_report_url = 'http://ehall.seu.edu.cn/qljfwapp2/sys/lwReportEpidemicSeu/*default/index.do#/dailyReport'
    config_file=open('config.json', encoding='UTF-8')
    j = json.load(config_file)
    print(date_of_today)
    for user in list(j.keys()):
        user=j[str(user)][0]
        print(user['username'], '开始填报')
        run(user)
        print(user['username'], '填报完成')
        time.sleep(random.randint(1,3))
    time.sleep(86400+random.randint(-120,120))

'''
1.默认填报体温为34°-35°随机生成
2.默认每24h执行一次填报,每次填报时间随机相差±2min,防止检测
3.默认操作之间随机延迟1-3s,防止检测
4.支持多人填报,按照格式在config.json中添加新信息即可
'''

Github下载链接

https://github.com/Luciferbobo/SEU_Report

已标记关键词 清除标记
<p> <span> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476"><span style="font-size:14px;"> </span></span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> 人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。 </p> <p class="ql-long-24357476"> <br /> </p> <p class="ql-long-24357476"> 本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; </p> <p> <span></span> </p> <p> <span style="color:#FF9900;"><span><span> </span></span></span> </p> <p class="ql-long-24357476"> <span style="background-color:#FFFFFF;color:#E53333;">【限时福利】</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476">1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包!</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476"><span>2)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。</span><br /> </span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476">---------------------------------------------------------------</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476" style="color:#E53333;">99元=掌握Linux必修知识+社群答疑+讲师社群分享会+700元编程礼包。</span> </p> <p class="ql-long-24357476" style="font-size:11pt;color:#494949;"> <span class="ql-author-24357476" style="color:#E53333;"><br /> </span> </p> <p style="font-size:11pt;color:#494949;"> <span> <img alt="" src="https://img-bss.csdn.net/202002140604337221.png" /></span> </p>
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页