ajax form表单提交_开发日志:金数据表单自动提交脚本
最近學校要求我們每天通過一個在線表單打卡自己在家做的體育課項目,在提交的時候我突然想了下如果能有一個自動的系統每天幫我自動打卡豈不是能省很多時間?而且我一直很想學Python的網絡爬蟲以及服務器后端的知識,所以開始著手開發這個項目。
首先附上項目地址:
https://github.com/MohaElder/AutomaticClockInSHSID?github.com項目用到的語言:
HTML,CSS,Javascript(用于編寫前端交互頁面)
Python:后端服務代碼
項目第三方依賴:
Jquery, Flask, APScheduler, CORS, selenium, yagmail
項目文件結構:
server.py:后端服務(本來還加了一個tornado用來host,但是發現apscheduler要重新寫就丟棄了)
index.html:前端網頁
style.css:前端網頁樣式文件
項目功能:
實現提交相關信息后在特定網頁上每隔24小時按照相關信息提交一次表單, 并且發送郵件告知用戶表單提交結果(網頁截圖方式)
下面來講一下項目的整體實現過程:
我花了大概六個小時在這個項目上面。在這六個小時中,我從0學習了Flask和Selenium并且花了很大一部分時間在探索Requests,Beautiful Soup以及RoboBrowser這些庫上面。
首先我們來看一下需要自動提交的表單:
表單提供商是金數據公司,表單格式我們通過檢查元素后發現是基本的<form>
順便我要吐槽這個token怎么是存在一個hidden input上面的通過Postman上的提交嘗試后,我發現表單提交需要驗證token。
對于這個項目我一開始有兩個思路:
1. 使用Requests和RoboBrowser實現抓取表單并自動提交表單
優點:速度快,調用資源少
缺點:token驗證較麻煩
2. 使用Selenium+Headless Browser(這里我使用了chrome)模擬用戶點擊并自動提交表單
優點:簡單直白,不需要應付token驗證
缺點:調用資源較多
在嘗試方法一時,我發現這個表單選擇班級的下拉框里面的內容是根據選擇第一個年紀下拉框后自動生成的,所以我并不能通過robobrowser一次性提交。因為第二個下拉框的options會檢測不到我的value并報錯。經過反復嘗試還是不行,所以我準備使用方法2。
方法2的Selenium真的是簡單爽快,一行代碼就是一次操作。我花了10分鐘就寫好了提交表單的邏輯代碼。
很簡單很直白的代碼在實現了自動提交表單這一操作后,我決定把它做成在線版。于是我使用了Flask作為web框架并創建了/clockin (method:POST)這個方法用來從前端提交表單相關信息。
這里我還使用了全局變量來動態添加新的用戶并放入接下來提到的定時執行數組
在定時執行這一塊,我使用了APscheduler作為執行庫,設置的是每30秒(方便測試)運行一次循環自動提交表單。
在發送郵件方法中,我使用了yagmail這個庫調用我的qq郵箱發送郵件給用戶。使用這個庫的原因是因為它的調用方式很簡潔,比原生的要方便很多。
以上就是這個項目所有的重點部分,我通過這個項目收獲了很多,學會了flask和爬蟲的基礎。希望大家能夠在看完這篇日記后也有所收獲~
歡迎各位在評論區留下反饋建議
總結
以上是生活随笔為你收集整理的ajax form表单提交_开发日志:金数据表单自动提交脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 书脊开胶了用什么胶粘_画册印制1万本,结
- 下一篇: 2020黑群晖最稳定版本_80%用户的选