用php和油猴实现课工场自动刷题
大体思路#
- 前台获取所有题目并做好标记
- 后台记录答案
- 从后台获取答案并自动填写
实现原理#
首先可以发现所有题目都是图片,但是 url 都有一个共同点,那就是 imageType=2
那么直接上代码
得到所有图片地址后发送到后台,后台将收到所有图片的 url 地址
这是一部分源码,关于这个 getQuestionIdFromImageUrl
待会再说
然后新建一个数据库,我这里是建了一个名叫 kgc_cheater
的数据库
以及表 question_answers
如下是表结构
以及使用 Medoo/Medoo 库用作数据库链接
然后写一个从数据库拿答案的逻辑
你们可能会好奇 maps
是什么,因为前台图片地址的运算是和后台不一样的
给你们看一下 getQuestionIdFromImageUrl
你们也许能明白
因为发现每个用户的图片地址都不相同,即使题目是一样的,但是每个账号图片地址都不会变,那么说明图片地址的计算是有规律的,研究半天发现,其实就是把 relativePath
参数用 /
分割后的把第二个部分减去指定偏移值,待会说明如何获取
我们直接向后台请求答案,返回 maps 和 answers 参数
maps
的定义其实就是 $url => $question_id
answers
的定义是 ['question_id' => $question_id, 'answer' => $answer]
如图,使用 3 个 parent 然后进入 ul.sec2 获取答案列表,然后找到包含答案的元素并模拟点击它
这样就完成了一次自动答题
回到上面,关于偏移值的获取,在你登录进去的时候看你的 url
559634
就是你的偏移值,进入答题页面
这是图片的源地址 https://tiku.kgc.cn/testing/cdn/getImage?relativePath=0069000/1543312740097/e19f21615ab8e9866619bf47c3b5b59c.jpg&imageType=2
获取原图片 id 为 0069000/1543312740097
使用偏移值减去第二个参数得到 1543312180463
最终得到题目 id: 0069000/1543312180463
其他账号经实验也能得到相同 id, 然后这是存到数据库里的实际 id
在进入主页面的时候我有一个脚本记录这个
使用 cookies 保存
附上代码
在解析界面有正确答案
每个部分都用 .sec.post
包起来了
然后往下取 .sec2
再取 img
并获取 url
可以得到图片 id, 同样取 relativePath
但是不需要应用偏移值了,直接存进数据库即可
同样的,答案在 .sec3
往下 .pad10
再往下 em:eq(0)
里
直接这样取
然后发给后端丢到数据库里记录起来
并在前台发送已记录消息
后端记录代码
然后就是前后端配合,自动记录题目,自动答题
最后就是自动刷题
进入一张试卷后,自动填写之后加了一段自动更新试卷的代码,如图
关于 fuxiAuto
后面的那串数字
也许我们都不太一样,附上科目 id 获取教程
首先进入
利用开发者工具找到开始测试按钮
javascript:unitExam(1098001001
)
这个 1098001001
就是科目 id
我这里最后一位数字是 1 到 7 所以写了个自动随机数随机生成 1 到 7 的整数
修改也很简单
将图片里的 1 和 7 改为你的最小值和最大值即可
推荐文章: