在疫情期间,很多的线下比赛都转移到了线上。由于是网络答题,所以就有了很多的便利性。有一些竞赛,他们是有自己题库的,但是并不提供检索功能,我们需要到它给定的网站练习答题,最终参赛答题。
情景假设:
假设你遇到了一个网络答题竞赛,又刚好比赛的题是是从他们自己的题库抽题,而且你很想得奖。前期你需要进入题库练习,题库分为很多的章节,每个练习页面就那么几道题,非常的不适合学习,那么不妨把题库(含答案)抓取下来。
前期探测:
如下图所见,有很多小的章节:

我们随便点击一个进去答题,打开控制台
,选择network
下的xhr
看看有没有相关接口,其中getExamList
较为可疑。点开发现,的确是接口。

可以使用post
方法来获取数据:

通过headers
一栏可以看到,有token
、account
与examID
三个参数,其中token为空,account是账户,examID就是试卷的ID。

我并没有登录,所以我们要尝试获取或者生成account
,全局搜索发现,这个account有一个默认值,也即是游客。 游客是可以答题且对答案的:

将试卷中的题目信息格式化,可以看到详细的选项与正确答案,题型等信息:

接下来寻找每页试卷入口,我们点击翻页可以看到它的数据接口地址:

查看headers,同样是post方法,参数如下,其中account没变,还是那个值:

点开看一下具体信息,包含了我们需要的examID
:

开始码代码:
思路很简单,逐个取页面中试卷的ID,然后通过答案接口,看到试卷的每个问题的问题、选项以及答案。

为了防止请求频繁,没开多线程,跑起来看看效果如何:

看一下劳动成果:

由于在编写程序时,已经规定了 问题、选项、答案在文本中的格式。 所以可以修改为csv文件。
那,现在学习起来是不是方便的多了呢?考试时想不起来的,也可以.....

总结:
以上情景纯属假设,本文只提供一个简单思路,如有雷同,...那也没啥办法!
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者: Austin 发表日期:2020-05-18 17:37