自動上班打卡系統 - Heroku排程執行Python遠端打卡腳本
現在有很多公司由於遠端工作,就設了一個遠端打卡的機制,讓我們需要登入公司或第三方的網站來打卡,這篇文章就是為了解決這個每天要額外設一個鬧鐘的困擾而寫,文章前半段講解爬蟲,後半段會講解Heroku的自動排程來自動執行Python腳本,目的是希望連初學者都能看懂,如果有任何問題都可以直接inbox我!
- 使用工具:Heroku排程、Selenium網路爬蟲、Chromedriver、Python
Part A: 因為部分Code的問題,中間五行在本機端執行時要拿掉,其他的爬蟲細節會隨公司系統改變,只要學如何抓網頁的Xpath即可根據網站不同應變
from selenium import webdriverimport os# 以下六行是讓Heroku能正常執行Selenium的關鍵,複製貼上即可chrome_options = webdriver.ChromeOptions()chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")chrome_options.add_argument("--headless")chrome_options.add_argument("--disable-dev-shm-usage")chrome_options.add_argument("--no-sandbox")driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), chrome_options=chrome_options)# 接下來是公司的打卡網站細節driver.get("公司的打卡系統網址") # 進入公司打卡的頁面account = driver.find_element_by_xpath("帳號填寫處的Xpath")account.send_keys("你的帳號") # 自動填入你的帳號password = driver.find_element_by_xpath("密碼填寫處的Xpath")password.send_keys("你的密碼") # 自動填入你的密碼driver.find_element_by_xpath("打卡鍵的Xpath").click() # 按打卡的按鈕driver.quit() # 打卡完成 把瀏覽器關掉
怎麼找Xpath:
只要是網頁所有可以填寫資訊或是有可以點選的地方都有自己獨一無二的Xpath,我們直接進到我們打卡的網頁點選右鍵選檢查(Inspect),可以看到右邊跳出一串網頁程式碼,點選小箭頭再找到你想要尋找的Xpath位置點一下(這邊舉例以打卡按鈕為例),在程式碼的區塊就會幫你匡出對應的區域
在匡出來的區域點右鍵,找到複製,再複製Xpath就找到Xpath了!
Part B: 如何將程式碼部署到Heroku上面,每天在指定時間執行?
Heroku官網:https://dashboard.heroku.com/apps
- 先創建一個Heroku帳號,並創建一個app,如下圖所示
2. 創建完成後進到Deploy的部分按造提供的步驟執行,先開啟本機端的Console(CMD) > cd進入執行程式、requirements.txt及chromedriver所放置的資料夾 > heroku login
> 會跳出heroku的網頁進行登入 > git init
> heroku git:remote -a 專案名稱
> 後面開始的三個步驟每次本機端檔案有更動要上傳到heroku時都要重複 git add .
> git commit -am “自己取的版本名稱“
> git push heroku master
把本機端的檔案丟到heroku的master branch上面 > repository的部分可以忽略
按照上面的步驟把三個檔案都丟到Heroku的專案中後,我們可以在Overview的地方看到整個專案已經成功地上傳成功,接下來進到Setting的地方輸入我們所需要的2個環境變數及2個Buildpacks,Buildpacks部分不要忘記python
CHROMEDRIVER_PATH | /app/.chromedriver/bin/chromedriver
GOOGLE_CHROME_BIN | /app/.apt/usr/bin/google-chromehttps://github.com/heroku/heroku-buildpack-google-chrome
https://github.com/heroku/heroku-buildpack-chromedriver
3. Heroku Scheduler
最後的一個步驟就是設定Heroku的Scheduler去讓他在每天的固定時段去跑上傳的python腳本,如下圖在Resource的地方找更多的add-ons,搜尋免費的Heroku Scheduler,並設定好每日想要打卡的時間就可以囉!
4. 可能遇到的問題:
當你在Heroku模擬Console執行的時候有可能遇到系統找不到Selenium的問題,這時候可以檢查上傳的requirements.txt有沒有包含到Selenium,因為如果這個.txt檔案是比較先前生成的可能會忽略掉這點,可以用以下兩行生成
pip freeze > requirements.txt
pip install -r requirements.txt
5. Heroku的Console
大家將程式碼丟上Heroku之後也可以在Console裡面先試跑看看成果~ More > Run console > python 你的檔案名稱.py
希望大家Work From Home的時候不用再設定鬧鐘來提醒打卡,利用python自動遠端打卡,就可以一覺睡到自然醒!
如果有幫到解決打卡的困擾,歡迎贊助一杯咖啡給我!