在疫情期间,很多的线下比赛都转移到了线上。由于是网络答题,所以就有了很多的便利性。有一些竞赛,他们是有自己题库的,但是并不提供检索功能,我们需要到它给定的网站练习答题,最终参赛答题。

情景假设:

假设你遇到了一个网络答题竞赛,又刚好比赛的题是是从他们自己的题库抽题,而且你很想得奖。前期你需要进入题库练习,题库分为很多的章节,每个练习页面就那么几道题,非常的不适合学习,那么不妨把题库(含答案)抓取下来。

前期探测:

如下图所见,有很多小的章节:

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

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

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

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

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

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

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

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

开始码代码:

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

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

看一下劳动成果:

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

总结:

以上情景纯属假设,本文只提供一个简单思路,如有雷同,...那也没啥办法!

标签: none

分类: 所有文章

添加新评论