今天来做一个好玩的,这个脚本做出来需要一点脑洞,hh~

当然,当你可以用adb控制手机的时候,不止能干这么些,还有更多有意思的,这就需要更大的脑洞了,比如自动薅羊毛~

思路:

  1. 利用adb截手机实时图
  2. 利用python图像处理库PIL处理图片将问题和答案的那一块截出来
  3. 利用百度识图,将图片转为中文字符串
  4. 利用百度搜索,搜索已转为中文字符串的问题
  5. 统计百度返回网页源码中对应答案出现的次数,出现次数最多的则视为正确答案
  6. 继续利用adb模拟点击手机中答案位置

什么是adb?

adb即 Android Debug Bridge,我们一般简称为adb,它是一个非常强大的命令行工具,通过这个工具你能够利用电脑与你的android设备进行交互。

adb下载:百度网盘获取:链接:https://pan.baidu.com/s/1tElgryyIuKRJ3h1PPSgGLw 密码:reop

记得将解压后的工具包添加到系统变量上,这样方便你用python脚本调用它。

可以参考这篇博文:常用的adb命令

一、将手机与电脑连接上

这一步首先需要手机开启开发者模式,因为各个手机打开的方式不一样,请根据自己机型自行百度。

然后是将手机用usb线连接电脑,在cmd下输入adb devices

若有如下图的返回则手机和电脑连接成功:

二、按上面的思路来打码

1、 利用adb截手机实时图

2、利用python图像处理库PIL处理图片将问题和答案的那一块截出来

这两步放在一个函数里就行了

这里先说一说下面一些(left, upper, right, lower)坐标是怎么确定的

首先,从微信进入头脑王者2,开始一场比赛

将比赛的有题目图截下来,截到图片的一般大小都是(1920*1080),比如下图:

然后以实际尺寸打开这张图片,再用截图工具量一下所需位置的宽高(当你截图时,一般截图工具会显示将要截的像素大小),或者你有更好的方法就另说。比如下两图是我获取问题的位置(左,上,右,下)的思路,其他位置也是这样获取:

然后就确定这些坐标了~

adb截手机实时图代码:

import os
import random
import requests
import subprocessfrom PIL import Image
from aip import AipOcr
from io import BytesIOdef get_screenshot():process=subprocess.Popen('adb shell screencap -p',shell=True,stdout=subprocess.PIPE)#相对于在cmd下执行了adb shell screencap -p,将会去截手机屏幕图screenshot=process.stdout.read()#读取截到的数据screenshot=screenshot.replace(b'\r\n', b'\n')#adb直接截的图在有点的问题,以二进制替换一下字符就可以了。img_fb=BytesIO()#BytesIO操作二进制数据,因为图片是二进制文件
    img_fb.write(screenshot)#写入内存img=Image.open(img_fb)#在内存打开图片title_img=img.crop((200,420,890,790))#裁剪原图,对应(left, upper, right, lower)剪出来的是问题那部分图片answers_img=img.crop((80,960,1000,1720))#裁剪原图,剪出来的是答案那部分图片
new_img=Image.new('RGBA',(920,1140))#新建一张图片,用来保存上面剪问题和答案部分,就是去掉了玩家头像之类的那些杂质new_img.paste(title_img,(0,0,690,370))#问题粘贴到新建的大图new_img.paste(answers_img,(0,380,920,1140))#答案粘贴到新建的大图,过滤了不必要的元素
new_img_fb=BytesIO()new_img.save(new_img_fb,'png')#保存图片with open('test.png','wb') as f:f.write(new_img_fb.getvalue())return new_img_fb  #返回新生成的图片

3、利用百度识图,将图片转为中文字符串

到百度云注册个账号:直达

到控制台-产品服务-人工智能-文字识别创建一个文字识别的应用如下,这种普通的文字识别每月有5w次的免费次数(开通这个应用免费,不用实名认证),我感觉没什么特殊的要求的话这已经绰绰有余了。

创建之后要找到这个位置,待会要用到里面的key:

对,还要pip安装百度云的python sdk

pip install baidu-aip

详情可到这里看看:文档直达

具体的利用:

def get_word_by_image(img):APPID = ''APIKey = ''SecretKey = ''  #这三个都在账号里面,上面有提到client = AipOcr(APPID, APIKey, SecretKey)  #创建链接res=client.basicGeneral(img)  #将图片传过去return res  #识图结果

4、利用百度搜索,搜索已转为中文字符串的问题

5、统计百度返回网页源码中对应答案出现的次数,出现次数最多的则视为正确答案

这两个也在一个函数里~

写个简单的爬虫逻辑就行了,如下:

def baidu(question,answer):url='https://www.baidu.com/s'headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}data={'wd':question}res=requests.get(url=url,params=data,headers=headers)res.encoding=res.apparent_encodinghtml=res.textfor i in range(len(answer)):answer[i]=(html.count(answer[i]),answer[i],i)  #循环4次,将答案在百度返回源码中出现的次数统计出来answer.sort(reverse=True)  #按降序排序答案,以出现在源码中次数最高的为答案return answer

6、继续利用adb模拟点击手机中答案位置

def click(point):cmd='adb shell input swipe %s %s %s %s %s'%(point[0],point[1],point[0]+random.randint(0,3),  #swipe实际上是拖动手机,这里加randint(0,3)是为了模拟长按手机point[1]+random.randint(0,3),200  #上面4个为坐标,这个200为持续点击的时间ms为它的单位
    )os.system(cmd)

三、利用以上函数

config={  #配置'头脑王者':{'title':(200,420,890,790), #用来记录标题的位置'answers':(80,960,1000,1720),'point':[(316,993,723,1078),(316,1174,723,1292),(316,1366,723,1469),(316,1570,723,1657),#四个答案的位置
        ]}
}def run():print('准备答题')while True:input('请按回车键开始答题:')img=get_screenshot()info=get_word_by_image(img.getvalue())if info['words_result_num']<5:continueanswers=[x['words'] for x in info['words_result'][-4:]]  #提取返回的对应题目答案的中文字符串,这个与百度云返回的数据结构有关,不必深究,会用就行question=''.join([x['words'] for x in info['words_result'][:-4]])  #提取返回的问题的中文字符串res=baidu(question,answers)print(question)print(res)print(config['头脑王者']['point'][res[0][2]])click(config['头脑王者']['point'][res[0][2]])  #模拟点击

四、总结

因为脚本有多次图像处理及连接网络的要求,所以效率会有点慢的其实。

而且也不一定对,因为是靠百度的答案,若你有题库就能快很多了。

The end~

转载于:https://www.cnblogs.com/byadmin/articles/10859991.html

微信小程序头脑风暴2答题辅助相关推荐

  1. 微信小程序头脑王者辅助神器

    起步 最近直播答题火热,群里也经常看到比拼微信小程序<头脑王者>.我比较笨,凭纯答题只到了黑金段位.鉴于本周刚刚点亮了收集抓包的技能,于是想试着通过这个来做一个辅助工具. 抓包 我使用的是 ...

  2. 微信小程序 满意度调查问卷答题类小程序实现

    最近暂时不用忍受学业压力,可以干一些自己想干的事情,由于接的小程序的锅太多,决定好好学习一下小程序,本次主要学习了答题问卷小程序的制作,涉及到题目切换.答案上传以及简单的完成情况判断等场景,本次设计特 ...

  3. 创建 Input Search 对象自己设计答题小程序 微信小程序设置自己的答题操作讲解 我要出题app|我要出题小程序 自定义微信答题小程序的制作方法 微信答题小程序 答题小程序

    您可以通过使用 document.createElement() 方法来创建 <search> 元素: var x = document.createElement("INPUT ...

  4. 微信小程序头脑王者脚本

    前一段答题特别火的时候写了一个微信头脑王者的小脚本来辅助答题,原理是将问题百度,然后看选项在搜索结果中出现的频率判断正确答案,准确率虽然不能达到百分之百,但是最起码能提高不少答题正确率. 首先导入需要 ...

  5. 【计算机毕业设计】微信小程序题目大全 总有一款适合你

    最新计算机毕业设计参考选题都有源码+数据库+文档 微信小程序大全 是近期作品 你的选题刚好在下面有,毕设帮助.技术解答.源码获取(有偿)联系方式见文末 题目汇总 基于微信小程序旅游管理系统 基于微信小 ...

  6. 微信小程序 毕业设计题目大全 (新颖选题)

    每年一到这个时候就会有大量的学生问,计算机专业毕业设计题目.计算机毕业设计选题等相关问题.微信小程序的选题恰巧是近年来热门的选题类型,所以今天精心为了大家整理出了最新计算机微信小程序毕业设计参考选题都 ...

  7. 微信小程序框架探究和解析

    2019独角兽企业重金招聘Python工程师标准>>> 何为框架 你对微信小程序的技术框架了解多少? 对wepy 框架进行一系列的深入了解 微信小程序框架解析和探究 小程序组件化框架 ...

  8. 微信小程序 RTMP 音视频 通话 ffmpeg_WebRTC与微信小程序音视频互通方案设计与实现...

    背景 在之前的WebRTC实时音视频通话之语音通话设计与实践中介绍了58 TEG部门基于 WebRTC 的实时音视频通话解决方案. 考虑到腾讯微信的小程序平台提供了音视频通话与直播的支持,如果能打通基 ...

  9. “头脑王者”爆红被封,微信小程序迎来蛮荒期

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 1月30日晚,当我闲来无事顺手拉开微信小程序的顶部界面,点击了"头脑王者" ...

最新文章

  1. gb2312转utf-8linux,linux GB2312转UTF-8 shell脚本
  2. 利用tar命令备份Linux系统
  3. 算法-二分搜索-找出最大值和最小值
  4. Linux进阶之路————组管理与权限管理
  5. 14 FI配置-财务会计-定义未结清过帐期间变式
  6. 【Matplotlib】【Python】如何使用matplotlib颜色映射
  7. Linux Top使用说明
  8. oracle和sql server中,取前10条数据语法的区别
  9. Node.js 的Web 服务器--Fenix
  10. SaaS架构设计之共享设备
  11. 常见的监控项目组网方案技术系统图,一文了解清楚!
  12. 基于javaweb的教师信息管理系统
  13. Python爬虫入门教程03:二手房数据爬取
  14. CSDN 迷你博客错误
  15. mac 上查看字体文件的路径
  16. 《C++沉思录》学习笔记1
  17. Car-t细胞治疗最新进展(2022年5月)
  18. RocketMQ 关于 No route info of this topic 问题
  19. (DDS)正弦波形发生器——幅值、频率、相位可调(一)
  20. 股票:开盘价 收盘价 涨停价 跌停价

热门文章

  1. re文件管理免root中文版,re管理器免root版本
  2. 微信每日推送天气预报每日情话-利用堡塔实现每天自动推送!
  3. 机器学习8:支持向量机(SVM)
  4. html select 样式t调整_css修改html select下拉框样式(含右边箭头)
  5. 修改盒子上的host文件
  6. jenkins下载地址deb包
  7. 公司安排不合理的出差,可以不同意吗
  8. 视觉里程计:特征点法之ORB特征点
  9. 小练手:用Canvas绘制谢尔宾斯基三角形
  10. Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)