背景
2月1日,OurEDA大群进了一个名叫小紫的机器人,具备聊天、积分系统、打劫系统等功能。先是把小紫当聊天机器人,随后就当个游戏来玩。OurEDA群自那天起,画风突变。
积分并不好赚,大家都想快点赚够1W积分,买下最贵的武器轩辕剑和最贵的防具捆仙锁。于是大家找到了赚积分最快的方法:24点和猜字谜。拼手速的时候到了。大家把题目放到百度中,得到结果后粘贴到对话框中发送。2月4日,已经厌倦持续n天的机械式的刷分,于是写个脚(wai)本(gua)的想法诞生了。
实现过程
1、数据通道的建立
要完成这个辅助,最重要的任务就是搭建信息的传输通道。下行即获取到小紫在eda群中的发言,上行即自己可以通过脚本进行发言。
QQ电脑版与手机版的数据传输都是TCP/UDP经过加密的,要实现脚本收发消息几乎不可能。我知道几年前有个叫web qq的东西,一查,现在web qq已经改名为smart qq。于是抱着试试看的态度扫二维码登上smart qq,抓包,惊喜地发现消息传输全是明文的,所以可行性就明朗了,发两种post请求即可。
起初用JS发ajax请求,但是我对JS不是很熟悉,不造是碰到了跨域ajax请求的问题还是cookie等请求头的问题。于是改用Python,却在编码问题上遭遇不少坑,还得感谢Python老司机@XSky晓天的帮助。2月4日晚,成功拉取到了QQ群里的消息。2月5日早上,成功地实现了发消息。
2、猜字谜的百度爬虫
猜字谜的爬虫很简单,百度XXX打一字,会直接在搜索结果页一个class为op_exactqa_s_answer的div中显示结果。采用requests库发请求,配合BeautifulSoup进行页面信息提取。这是我自己手写的第一个爬虫。
下午,放到群里试,又一个机器人诞生了。两边机器人开始对刷了。刷太快小紫还会说我刷屏。没办法,两条之间加点延时。
3、24点的自动计算
上网找了个在线计算24点的网站,对那个计算按钮右键,审查元素。发现按按钮时没发网络请求,那就是在Js中直接计算出来的。于是直接找到那段Js代码,使用Python去执行它,就能得出结果了。
Python执行Js用
4、一些附加功能
至此,自动猜字谜和自动刷24点都已经实现。但是自动猜字谜每天有次数限制,自动刷24点无限。于是就想找个夜深人静的时候(3点)自动开始刷,然后6点自动停止。那就用定时器呗。第一个晚上没有成功,因为深夜大家发消息少,拉消息要阻塞很久才返回,在2点多,服务器返回了一个errcode:0,误判为Cookie过期而导致程序退出。
第二个晚上还是没成功,因为设错了定时器,Python的timer只能执行一次的,改用新线程来写。第三个晚上还没到。
|
|
后来,又实现了远程控制开关的功能。即我在聊天窗口发一条消息,即可控制自动答24点、自动猜字谜的开启与关闭,还可在软院大群、eda群之间切换。由于实现方法存在漏洞,暂不透露实现原理。