利用Python製作頭腦王者輔助神器
阿新 • • 發佈:2018-11-01
抓包
我使用的是 fiddler
抓的,網上關於抓app包的教程很多,可自行查閱,這裡不贅述。根據抓包發現出題目的介面:
資料格式是一個 json 字串,如下所示:
{"data":{"quiz":"我國的根本大法指的是?","options":["刑事訴訟法","刑法","婚姻法","憲法"],"num":3,"school":"理科","type":"地理","typeID":9,"contributor":"孫悅悅","partner":0,"endTime":1516447448,"curTime":1516447433,"myBuff":{}},"errcode":0}
解決了題目的獲取,接下來就是想辦法把題目傳遞到其他程式,利用 FiddlerScript
就可以了:
點選 FiddlerScript
然後選擇 OnbeforeResponse
進入該函式內,寫下如下程式碼:
這部分就是將題目發到自己寫的一個程式上:
if (oSession.fullUrl.Contains("question.hortor.net/question/bat/findQuiz")) { //把內容通過ajax http傳送其它地方 var _xhr = new ActiveXObject('Microsoft.XMLHTTP'); var url = 'http://localhost:8000/api/brain_king/'; //不需要返回值所以設定為空回撥 _xhr.onreadystatechange = function() {} _xhr.open('POST', url, true); _xhr.setRequestHeader("Content-Type", "application/json"); _xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); _xhr.send(oSession.GetResponseBodyAsString()); }
解答問題
得到問題後如何答題就見仁見智了,最簡單的一個方式就是把問題提交到百度上,進行詞頻統計,大多數情況下詞頻多的為正確答案,於是我及其簡單的做了處理:
class BrainKing(generics.GenericAPIView): def post(self, request): question_dict = request.data.get("data") question_text = question_dict["quiz"] choices = question_dict["options"] content = requests.get('http://www.baidu.com/s?wd=' + question_text, timeout=2).text for choice in choices: print(choice + " : " + content.count(choice)) return Response("")
你以為我會用很高階的語義分析等自然語言處理嗎?其實我也有試,但效果還不是很好,準確率不如詞頻統計,等優化後再說吧。
成果展示
用這個上分確實很快,不過缺點也是比較明顯的,帶一些干擾詞就不行了,但總體上王者還是比較輕鬆的:
後期如果再加上 adb 命令,就可以實現自動化答題了。
我有個朋友真的靠純答題上的王者,令人敬佩。最後提醒一下,遊戲而已,不要為了攀比傷了和氣。