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

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

思路:

利用adb截手机实时图

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

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

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

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

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

什么是adb?

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

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

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

一、将手机与电脑连接上

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

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

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

二、按上面的思路来打码

1、 利用adb截手机实时图

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

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

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

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

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

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

然后就确定这些坐标了~

adb截手机实时图代码:

importosimportrandomimportrequestsimportsubprocessfrom PIL importImagefrom aip importAipOcrfrom io importBytesIOdefget_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

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

具体的利用:

defget_word_by_image(img):

APPID= ''APIKey= ''SecretKey= '' #这三个都在账号里面,上面有提到

client = AipOcr(APPID, APIKey, SecretKey) #创建链接

res=client.basicGeneral(img) #将图片传过去

return res #识图结果

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

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

这两个也在一个函数里~

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

defbaidu(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_encoding

html=res.textfor i inrange(len(answer)):

answer[i]=(html.count(answer[i]),answer[i],i) #循环4次,将答案在百度返回源码中出现的次数统计出来

answer.sort(reverse=True) #按降序排序答案,以出现在源码中次数最高的为答案

return answer

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

defclick(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),#四个答案的位置

]

}

}defrun():print('准备答题')whileTrue:

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~

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

  1. 微信小程序python自动化测试_微信小程序的自动化测试框架

    微信小程序的自动化测试框架 微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点: 支持一套脚本,iOS & Android & 模拟器,三端运行 提供丰富的页 ...

  2. 微信小程序 python 自动化测试_微信小程序的自动化测试框架

    微信小程序的自动化测试框架 微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点: 支持一套脚本,iOS & Android & 模拟器,三端运行 提供丰富的页 ...

  3. 微信小程序python自动化测试_微信小程序UI自动化测试实践:Minium+PageObject

    小程序架构上分为渲染层和逻辑层,尽管各平台的运行环境十分相似,但是还是有些许的区别(如下图),比如说JavaScript 语法和 API 支持不一致,WXSS 渲染表现也有不同,所以不论是手工测试,还 ...

  4. 微信 小程序 python 商城_微信小程序——商城篇

    前言 随着wepy和mpvue的出现及流行,开发小程序变的越来越便捷和强大,作为基佬社区的一份子,我们都需要把自己遇到的问题以及如何解决的方式相互分享,这样才能帮助到更多的朋(ji)友(lao).如有 ...

  5. 微信 小程序 python 渲染_微信小程序渲染html内容

    最近又做了一个新的小程序关于物流订单查询欢迎来体验 遇到了一个小问题:数据中返回电话号码的字符串识别出来并且高亮和可以绑定事件.比如数据中包含您的派送员黄xx正在派件,电话:137xxxx41460已 ...

  6. 微信小程序 python接口_微信小程序-封装请求基准路径、接口API 和使用

    1.在文件夹utils下新建 request.js文件 2.封装请求代码 // 基准路径 //路径仅为举例 const baseurl ='https://127.0.0.1' //get请求 fun ...

  7. 微信小程序头脑风暴2答题辅助

    今天来做一个好玩的,这个脚本做出来需要一点脑洞,hh~ 当然,当你可以用adb控制手机的时候,不止能干这么些,还有更多有意思的,这就需要更大的脑洞了,比如自动薅羊毛~ 思路: 利用adb截手机实时图 ...

  8. 微信跳一跳python代码_微信跳一跳python程序

    #源码下载地址:https://files.cnblogs.com/files/cnfan/jump.rar importosimportcv2importnumpy as npimporttimei ...

  9. 猿来小课Python视频老师简述让程序员崩溃的瞬间

    作为一个资深的程序猿,我日常的任务就是和代码无数次交锋,在公司敲代码时不知道你们有没有遇到过让你崩溃的瞬间呢?本篇文章猿来小课Python视频老师就收集整理了一些让程序员崩溃的瞬间,让我们下面一起来对 ...

  10. python搭建微信小程序百度云_微信小程序-订餐系统-Python flask构建

    总大小:14.3 GB └-python3+flask └-centos ├-CentOS-7-x86_64-Minimal-1804.iso 906.0 MB └-mysql ├-mysql-ins ...

最新文章

  1. struts2+hibernate+Spring分层开发
  2. 癌症中克隆种群结构统计推断分析软件PyClone安装小记
  3. python防反编译_Python - 浅谈Python的编译与反编译
  4. 测试asp.net for Linux的环境搭建
  5. python strip() 函数探究
  6. GIS可视性分析概述
  7. Struts 体系结构与工作原理(图)
  8. 精选22个Pandas函数!
  9. Hibernate写hql语句与不写hql语句的区别?
  10. OpenShift 4 之AMQ Streams(1) - 多个Consumer从Partition接收数据
  11. @程序员,入门爬虫看这一篇就够了!
  12. 深入理解Oracle Exadata
  13. Gurobi优化器使用(一)搭建并求解一个优化模型的过程【C++环境】
  14. 非负矩阵分解小白入门
  15. 常用芯片数据手册—— INA333 低功耗、精密仪表放大器(德仪)
  16. Character类的常用方法
  17. C语言编程规范(个人整理)
  18. 相机选型焦距、距离的计算
  19. 矩阵理论——线性空间
  20. 游戏开发入门(二)游戏开发概述

热门文章

  1. 【Unity】 2D贪吃豆开发流程
  2. 【推荐】网络安全学习路线和资料分享
  3. 机器学习的13种算法和4种学习方法,推荐给大家
  4. 123页6万字XX市新型智慧城市顶层设计方案
  5. o2o模式的优势 o2o模式的劣势
  6. spring框架特点
  7. 用计算机解决对长江水源治理的问题,科学调控长江水资源的思考
  8. 数据总线,地址总线,存储容量计算题理解
  9. 如何更换ppt模板内容不变_怎么修改固定的ppt模板中的字和图片
  10. LeetCode 206. 反转链表(c语言实现)