西安交大體溫自動填報程式!自動化就是強!

pythonlaodi發表於2020-12-19

該程式僅供學習和娛樂,如果真的涉及重要疫情資訊,請如實向上填報。

  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
  1. 將該txt檔案字尾名改為“.bat”。

  2. 雙擊該bat檔案程式是否正常執行。

  3. 把該bat檔案快捷方式新增到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp資料夾。

  4. 下次開機時檢查程式是否正常啟動。

啊,填完這個表真的好累啊,框架裡面還內聯著框架,如果能用一定要給我點贊啊。。。 有問題的話歡迎吐槽和交流。看到的話都會回覆。

後記

近期有很多朋友通過私信諮詢有關Python學習問題。為便於交流,點選藍色自己加入討論解答資源基地

 

相關文章