西安交大体温自动填报程序!自动化就是强!

178 阅读3分钟

该程序仅供学习和娱乐,如果真的涉及重要疫情信息,请如实向上填报。

  1. 已经安装python

  2. 需要安装selenium库

  3. 还需要装好浏览器驱动,我用的是Win7下360极速浏览器(360Chrome)。当然也可以选用其他的更快更好的。Win10下搭建Python3.7.1 selenium3 Chrome开发环境。最后我是下载得到的驱动命名为Chromedriver.exe然后扔到了G:/360Chrome/360Chrome/Chrome/Application目录下。

    from selenium import webdriver import os import time import random

    def main(): # 如果没有将chromediriver驱动放到Python的Scripts全局目录,则需要指定对应的执行路径 # 指定绝对路径,引入chromedriver.exe chromedriver = "G:/360Chrome/360Chrome/Chrome/Application/chromedriver.exe"

    chromedriver = "G:/360Chrome/360Chrome/Chrome/Application/360chrome.exe"

    os.environ["webdriver.chrome.driver"] = chromedriver
    browser = webdriver.Chrome(chromedriver)
    
    # 如果将驱动复制到全局目录,则不需要指定驱动路径,如下:
    

    browser = webdriver.Chrome()

    # 设置浏览器需要打开的url
    url = "http://one.xjtu.edu.cn/EIP/nonlogin/user/index.htm"
    browser.get(url)
    home_page = browser.current_window_handle
    time.sleep(2)
    
    # 单击登录按钮
    browser.find_element_by_css_selector("a[class=login-btn").click()
    time.sleep(2)
    
    # 登录
    browser.find_element_by_css_selector("input[type=text").send_keys("这里输入学号")
    browser.find_element_by_css_selector("input[type=password").send_keys("这里输入密码")
    browser.find_element_by_id("account_login").click()
    time.sleep(2)
    
    # 寻找并跳转至表单
    iframe1=browser.find_element_by_tag_name("iframe")
    browser.switch_to.frame(iframe1)
    # 打开每日报标签
    browser.find_element_by_partial_link_text("健康每日报").click()
    time.sleep(2)
    # 关闭原标签
    browser.close()
    # 跳转至每日报标签
    all_handles = browser.window_handles
    for handle in all_handles:
        if handle != home_page:
            browser.switch_to.window(handle)
    # 再次登录
    browser.find_element_by_css_selector("input[type=text").send_keys("这里再输入学号")
    browser.find_element_by_css_selector("input[type=password").send_keys("这里又是密码")
    browser.find_element_by_id("account_login").click()
    time.sleep(2)
    
    # 先进入大表单,寻找“本科生每日”>iframe1
    iframe1=browser.find_element_by_tag_name("iframe")
    browser.switch_to.frame(iframe1)
    time.sleep(2)
    # 进入大表单的第二[1]个小表单里面找元素iframe1>iframes[1]
    iframes = browser.find_elements_by_tag_name('iframe')
    browser.switch_to.frame(iframes[1])
    browser.find_element_by_partial_link_text("本科生每日").click()
    time.sleep(1)
    
    # 回退两次,进入第二[1]个大表单里面,寻找“每日健康填报”>iframes[1]
    browser.switch_to.parent_frame()
    browser.switch_to.parent_frame()
    iframes = browser.find_elements_by_tag_name('iframe')
    browser.switch_to.frame(iframes[1])
    browser.find_element_by_css_selector("li[data-blname=每日健康填报").click()
    time.sleep(2)
    
    # 回退一次,>iframes[2]>iframes[0],填写
    browser.switch_to.parent_frame()
    iframes = browser.find_elements_by_tag_name('iframe')
    print(iframes,'\n')                             # 显示现有表单
    browser.switch_to.frame(iframes[2])
    iframes = browser.find_elements_by_tag_name('iframe')
    browser.switch_to.frame(iframes[0])
    time.sleep(1)
    browser.find_element_by_id("mini-3$2").click()  # 选择健康码为绿色
        
    tpt=random.randint(3,6)/10+36                   # 计算随机体温
    tpt=str(tpt)                                    # 转化为字符串
    browser.find_element_by_id("BRTW$text").send_keys(tpt)   # 输入体温
    browser.switch_to.parent_frame()                # 表单回退
    browser.find_element_by_id("sendBtn").click()   # 提交
    time.sleep(2)
    browser.find_element_by_partial_link_text("确定").click()   # 确认
    
    time.sleep(2)
    
    # 关闭浏览器
    browser.quit()
    

    if name == 'main': main()

最后提交完信息以后浏览器会正常关闭。

如果程序中途运行卡住了,可能是浏览器还没反应过来,程序就进入下一步了。 可以在卡住的位置增大等待时间,即增加time.sleep(“SleepTime”)的休息时间SleepTime。

开机自启办法:

  1. 上述代码存为pytest.py。

  2. 在python主目录写了一个txt文件。

    start python pytest.py
    pause

  3. 将该txt文件后缀名改为“.bat”。

  4. 双击该bat文件程序是否正常运行。

  5. 把该bat文件快捷方式添加到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp文件夹。

  6. 下次开机时检查程序是否正常启动。

啊,填完这个表真的好累啊,框架里面还内联着框架,如果能用一定要给我点赞啊。。。 有问题的话欢迎吐槽和交流。看到的话都会回复。

后记

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地