前几天的一篇文章给大家分享了利用 Selenium 自动刷课的脚本,时光飞逝,挂脚本刷完时长,又到了要考试的日子。对于这种 “无关紧要” 的考试,我打算继续使用 聪明 的自动化工具帮我完成考试~
爬取题库
想要完成作答,免不了需要题库的支撑。考试的题目也都是源于题库,甚至原封不动从题库中抽取题目进行测试。爬虫那可是咱的拿手好戏,说干咱就干!
加入必要的 params 参数,构造简单的 requests 请求,我们可以轻松的访问到题库所在网页。利用 XPath 我们可以获得问题及其答案。题库这里的题型有判断题以及单项选择题两种,我们可以按照相同的方式将他们存入相应的字典中。
接着使用不同的参数,获取不同类型题库的数据并汇总到同一个txt文件中。
模糊匹配
这里用到了第三方库 fuzzywuzzy 。fuzzywuzzy 是一个简单易用的模糊字符串匹配工具包。它依据 Levenshtein Distance 算法来计算两个序列之间的差异。
Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。
我们利用这个库可以实现试题题目与题库题库的模糊匹配,认定题库中和试题相似度最高的题目的答案就是我们需要填入的答案。
from fuzzywuzzy import process
a=process.extractOne(question, dic.keys())
ans=dic[a[0]]
自动化实现
通过模糊匹配我们可以从题库中获得试题的答案,接着就需要把整个答题过程用自动化工具实现,当然少不了好帮手 selenium 。
上次提到的自动登录已经实现了,就不再赘述。我们在登录之后操作浏览器进入考试界面并且获取试题的文本内容,然后利用模糊匹配得到相应的答案,点击对应的按钮,完成答题操作。
每答10道题完成相应的翻页操作。在完成答题之后,点击提交按钮并且关闭"确认交卷"的弹出框。下面是效果图片~答题准确率高达100%,这个题就是题库的题,石锤了!