前言
文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。
背景說明
在github上發現一個古老的華醫網考試腳本(https://github.com/lhzzzzzz/autoexamofhuayi),是python2寫的。它實現了華醫網自動登錄、自動獲取考試編號cwid、自動考試。現在把它翻新一下。
腳本功能
基於已知的考試編號cwid,進行華醫網自動考試。
需要用到的工具(開發環境)
1、Google Chrome;
2、Fiddler:用於抓包;
3、PyCharm
思路分析
一、答題流程分析
已有現在的Javascript腳本(《華醫網自動答題腳本》),根據華醫網的答題代碼,進行自動答題。但這個代碼使用的是試錯了,反覆提交需要消耗時間,不適合批量操作。
根據GitHub現有腳本(https://github.com/lhzzzzzz/autoexamofhuayi),發現華醫網是直接把原答案放在試題的網頁中
所以其實在答題界面,用chrome的F12進行Inspect,也能找到正確答案。
name=“gvQuestionresult” 對應的 value即正確答案的value
通過Fiddler抓包可以看到,考試主要包括三個動作:
1、GET 考試試題
2、POST 考試試題+答案
3、GET 考試結果
而其中
POST答案提交的data包括以下幾部分:
1、__EVENTTARGET 等是 ASP.Net 相關驗證參數:可以從考試界面的網頁中用正則表達式提取;其中留空的字段可以不提交
2、Hidden1、Hidden2、Hidden3:表示最前面的課程評價星級,可以不提交;
3、gvQuestionquestion_id、gvQuestionresult、gvQuestionrbl :表示題號、正確選項、考生選項(這裏當然是直接提交正確選項的value)
二、模擬登錄華醫網
根據舊的py腳本,以前的華醫網登錄不需要驗證碼,現在有了圖片驗證碼,登錄變得麻煩了。還是改成手動複製Fiddler抓到的cookie吧
三、Session會話保持
華醫網登錄之後使用Session進行對話,獲取考卷、提交考試、獲取成績都會刷新cookie,而且只有最新的cookie能進行下次對話。
所以這裏需要用requests.session()保持會話,而且起始的cookie必須是最新的一個cookie
運行結果
如果全部考完,可以在網頁中看到可以申請證書。
MORE
華醫網很多bug的,如沒有完成考試也可以直接申請證書,在考試結果頁面,瀏覽器狀態輸入代碼就可以。
使用流程(代碼實現)
爲解決初學者學習上的困難,專門建立的Python學習扣QUN:⑧⑤⑤-④零⑧-⑧⑨③從零基礎開始到Python各領域的項目實戰教程、開發工具與電子書籍。與你分享企業當下對於python人才需求及學好python的高效技巧,不停更新最新教程!點擊加入我們的 python學習圈