坐標某帶專,學校日常要求每天打卡,而且要在8點前打卡,萬一睡過頭的話估計一睜眼就是輔導員在群里咆哮了,所以開始學習selenium打算搞一個一鍵打卡的腳本出來。
先考慮一下需要有什么步驟吧:1. 在特定時間打開並進入健康打卡網頁.2. 定位輸入框位置,並輸入賬號密碼 3. 進入打卡頁面 4. 定位需改變選項框,並將框中內容選為綠碼 5. 提交 6. 設置開關,防止重復打卡,自動關閉計算機等。
需要用到這些函數,從selenium模塊中導入
接下來要注意的是,在開始爬網頁之前,要先安裝相應瀏覽器webdriver,
例如我使用的是Edge,在Microsoft Edge WebDriver - Microsoft Edge Developer直接下載安裝,並且記住安裝位置。
接下來打開需要訪問的網頁:
#s = Service(r"【剛剛安裝的webdriver.exe的位置】")
#driver.get('需要訪問的網頁的url')
在這里先試運行一下以上6行吧(以baidu為例):
1 from selenium import webdriver 2 from selenium.webdriver.common.by import By 3 from selenium.webdriver.chrome.service import Service 4 5 s = Service(r"D:\Application\edgedriver_win32\msedgedriver.exe") 6 driver=webdriver.Edge(service=s) 7 driver.get('https://www.baidu.com/')
運行以上代碼后會自動打開URL為https://www.baidu.com/的網頁,同樣的,也可以這樣打開別的頁面,比如打卡系統......
好了現在已經完成第一步了,接下來需要達成的目的是:將用戶號和密碼輸入到那個框里面,然后點擊【進入健康狀況上報平台】。
F12進入開發者模式,觀察頁面源代碼:
我們爬網頁時需要了解一下html,html是一種用於創建網頁的標准標記語言,web開發常用的前端語言,HTML 教程 | 菜鳥教程 (runoob.com),在瀏覽器的開發者模式中可以直接看到網頁源碼。
定位到用戶號輸入框的name屬性為“uid”,同理密碼輸入框的name=“upw”,【進入】按鈕的name=”submit“。
idinputbox=driver.find_element(By.NAME,"uid") #定位賬號(學號)輸入框 pwinputbox=driver.find_element(By.NAME,"upw") #定位密碼輸入框 LoginButton=driver.find_element(By.NAME,"smbtn") #定位"進入健康狀況上報平台"按鈕
idinputbox.send_keys('【用戶名】') #輸入用戶名
pwinputbox.send_keys('【密碼】') #輸入密碼
LoginButton.click() #點擊按鈕,進入下一界面
現在已經登入打卡系統了,接下來的操作跟上邊差不多。
定位“本人填報”按鈕的位置,並點擊:
reportbutton=driver.find_element(By.XPATH,'//*[@id="bak_0"]/div[11]/div[3]/div[4]') #這里是通過Xpath定位的,在源代碼中點擊要定位的元素右鍵可以直接復制該元素的Xpath reportbutton.click() #點擊按鈕
接下來按照預想應該是進入下一界面了,但是這里會報錯,
說定位不到,這是因為“本人填報”元素實際上是處在一個嵌套的表單中,需要先找到該元素所在的frame表單,定位這個表單,跳轉到這個表單,上面兩行代碼可以修改如下:
xf=driver.find_element(By.ID, "zzj_top_6s") driver.switch_to.frame(xf) reportbutton=driver.find_element(By.XPATH,'//*[@id="bak_0"]/div[11]/div[3]/div[4]') #這里是通過Xpath定位的,在源代碼中點擊要定位的元素右鍵可以直接復制該元素的Xpath reportbutton.click() #點擊按鈕 driver.switch_to.default_content()#切換回主文檔
在解決frame表單嵌套導致定位失敗的問題時參考了這篇文章:https://www.jianshu.com/p/83087c24ab19
然后就進入最后一個頁面了。
定位和點擊提交表格,方法和上一步驟一樣。
終於可以半夜12點之前睡覺了。
但是僅此而止的話意味着如果想要這個程序發揮作用,我還得在12點后打開電腦然后......再讓它自己打卡。突然想起來一個笑話,一人賣跳蚤葯,招牌上寫出“賣上好蚤葯”。問:“何以用法?”答曰:“捉住跳蚤,以葯塗其嘴,即死矣。”
最后一步,把程序加到任務計划庫里(參考Windows定時運行python程序_鎮上村樹的博客-CSDN博客_定時運行py)
設置觸發時間為12點15分,並且在代碼的末尾加上關機函數,電腦保持待機,打完卡直接關機
os.system('shutdown /s /t 0') #關機
啊,終於可以睡覺了。
感覺這操作好傻啊,不過以后可以試試干點別的...