背景:帮我们家小仙女爬取微信公众号数据

  • monkeyrunner
  • 通过微信公众号平台抓取,问题: 1.每天都要登陆,获取cookie,麻烦;2. 同时微信后台有频率限制,访问限速,有点恶心
  • 通过appium 基于控件操作手机,appium容易出现各种报错信息,解决起来麻烦
  • 利用airtest网易自动化测试工具,它基于图像识别,个人觉得可能慢,还有身为码农执行图片浑身难受
  • 如果你不想学appium或者monkeyrunner操作手机,auto.js也是一种方法,不要adb
  • 最后如果实在搞不定,可以使用pyautogui自动化控制鼠标和键盘操作操作PC端微信抓包亦可
  • 黑猫白猫抓住老鼠就是好猫,对吧

MonkeyRunner简介

编程语言 Python 是否能自定义测试步骤
UI定位方式 基于坐标 上手难易度 一般
脚本执行便捷度 方便 脚本后期维护成本
扩展性

环境搭建请看

from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
from com.android.monkeyrunner.recorder import MonkeyRecorder as recorderfrom com.android.monkeyrunner.easy import By
from com.android.monkeyrunner.easy import EasyMonkeyDevice as emd
from com.android.chimpchat.hierarchyviewer import HierarchyViewer

一、MonkeyDevice为monkeyrunner的工作站访问的真机或模拟器

  • MonkeyRunner

    alert() 警告框 choice() 选项列表框
    help() API帮助文档 input() 输入
    sleep() 休眠 WaitForConnection() 等待设备连接
  • 把模拟器和monkey绑定, 它还提供了用于创建用户界面显示提供了方法。

    device = mr.waitForConnection()
    

    参数1:超时时间,单位秒,浮点数。默认是无限期地等待。
    参数2:串deviceid,制定的设备名称。默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。
    默认连接:device=MonkeyRunner.waitForConnection()
    参数连接:device=MonkeyRunner.waitForConnection(1.0, 'emulator-5554‘)

二、MonkeyDevice进行安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等

  • MonkeyDevice

    broadcastIntent() 发送广播 drag() 拖动
    getProperty() 获取当前设备属性 getSystemProperty 获取当前设备属性
    installPackage() 安装应用 Instrument() 执行测试用例
    press() 按键 reboot() 重启
    removePackage() 删除执行Package shell() 执行命令
    stratActivity() 启动应用 touch() 点击
  • 启动Activity(“包名/activity名”)

     device.startActivity(component="com.tencent.mm/.ui.LauncherUI")
    
  • 安装APK应用包

    device.installPackage('Wechat.apk')
    
  • 卸载安装APK应用包

    device.removePackage ('com.tencent.mm')
    
  • 点击控件

    • DOWN 指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上
    • UP 释放一个键或从屏幕上抬起
    • DOWN_AND_UP点击
    device.touch(520,36,"DOWN_AND_UP")  点击device.touch(507, 72, MonkeyDevice.DOWN)  长按device.touch(507, 72, MonkeyDevice.UP)    松开
    
  • 输入文本

    device.type('Hello world!')
    
  • 滑动屏幕 X:开始坐标 Y:结束坐标 D:拖动持续时间 S:插值点时要采取的步骤,默认是10

    device.drag((288, 1024), (288, 204), 0.1, 10)  竖滑device.drag((520, 150), (520, 350), 0.1, 10)   横滑for i in range(1,6): device.drag((288, 1024), (288, 204), 0.1, 10)  连续滑动
    
  • 设备按键
    方法1:键盘事件:device.press(键码)
    方法1:键盘事件:device.press(键码, 触摸事件类型)

    device.press('KEYCODE_HOME', md.DOWN_AND_UP)device.press('KEYCODE_HOME', MonkeyDevice.DOWN_AND_UP)
    
    按键 名称 按键 名称
    menu键 KEYCODE_MENU home键 KEYCODE_HOME
    back键 KEYCODE_BACK search键 KEYCODE_SEARCH
    下导航键 KEYCODE_DPAD_DOWN 上导航键 KEYCODE_DPAD_UP
    左导航键 KEYCODE_DPAD_LEFT 右导航键 KEYCODE_DPAD_RIGHT
    call键 KEYCODE_CALL end键 KEYCODE_ENDCALL
    上音量键 KEYCODE_VOLUME_UP 下音量键 KEYCODE_VOLUME_DOWN
    power键 KEYCODE_POWER camera键 KEYCODE_CAMERA
    OK键 KEYCODE_DPAD_CENTER
    • 重启设备 device.reboot()
    • 唤醒屏幕 device.wake()
    • 单击电源键,熄灭屏幕 device.press('KEYCODE_POWER', MonkeyDevice.DOWN_AND_UP)
    • 正在运行程序的休眠时间设置:mr.sleep(2) 与 time.sleep(2)相同

三、MonkeyRecorder方式启动, 得到一个小页面,记录操作流程所在的坐标

  • recorder.start(device) 导出的代码建议用python重写一下

四、MonkeyImage截图并将截图保存

  • MonkeyImage

    convertToBytes() 转换图像格式 getRawPixel() 获取当前坐标像素元组
    getRawPixeIint() 获取当前坐标像素值 sameAs() 图像对比
    writeTOFile() 保存图像文件 getSubImage() 截取子图像
  • result = device.takeSnapshot()  截图result.writeToFile('myproject/shot1.png','png')  保存截图()sameAs (MonkeyImage other, float percent)
    将此 MonkeyImage 对象与另一个对象进行比较,并返回比较结果。
    percent 参数指定两张“等同”的图片之间可以存在的百分比差异。monkeyrunner截图对比
    result1.sameAs(result0,1.0)getSubImage (tuple rect)` 根据当前图片的矩形选择区创建一个新的 MonkeyImage 对象。
    局部图片(前两个值是左上角左边,后两个值是右下角减左上角的坐标。)
    pic0= result0.getSubImage((4,41,400,700))
    

高级用法

转载:拼搏的少年

根据ID找到ViewNode,对viewnode的一些操作等
from com.android.chimpchat.hierarchyviewer import HierarchyViewer
提供了根据ID进行访问方法touch、drag等
from com.android.monkeyrunner.easy import EasyMonkeyDevice
根据ID返回PyObject的方法
from com.android.monkeyrunner.easy import By
代表一个控件,可获取控件属性
from com.android.hierarchyviewerlib.models import ViewNode as vn单击控件
easy_device.touch(By.id('id/qingchu'),device.DOWN_AND_UP)
monkeyrunner长按控件
easy_device.touch(By.id('id/qingchu'),,MonkeyDevice.DOWN)
MonkeyRunner.sleep(1)
easy_device.touch(By.id('id/qingchu'),MonkeyDevice.UP)

如果帮到你,点个赞再走呗!!

monkeyrunner操作手机相关推荐

  1. 怎么利用linux来操作手机,Linux_在Linux操作系统下操作蓝牙手机的方法,所谓操作,到现在只是通过蓝 - phpStudy...

    在Linux操作系统下操作蓝牙手机的方法 所谓操作,到现在只是通过蓝牙做了二件事: 一.通过虚拟串口连接上手机,执行AT命令操作手机(发短信而已) 二.手机和电脑互传文件 如果使用redhat 9.0 ...

  2. 用串口操作手机收发短信总结

    终于完成了用Java操作手机的模块,遇到了不少麻烦,在这里总结一下,也希望对大家有所帮助. 可能有很多人会问,现在的手机与计算机连接都是USB口,那研究串口手机通讯有什么意义?我开始也是这样考虑,所以 ...

  3. 用Total Control在电脑操作手机

    官网:http://tc.sigma-rt.com.cn/ 下载后安装,把手机通过数据线与电脑连接,开通USB调试模式,然后就可以很方便的在电脑上操作手机了. 如图: PS:这个东东主要是为了方便开发 ...

  4. 在pc端上操作手机工具分享

    在pc端上操作手机工具分享 今天要跟大家分享的工具名字叫scrcpy(来源于GitHub) scrcpy可以通过usb或是(Tcp/IP)来连接安卓设备,并且不需要root权限,程序支持GNU/Lin ...

  5. 微信公众号抓取 操作手机相关操作 ②

    上篇文章:https://blog.csdn.net/hhaimm/article/details/124174951?spm=1001.2014.3001.5501(环境搭建及部分anyproxy ...

  6. python操作手机app超详细步骤

    〝 古人学问遗无力,少壮功夫老始成 〞 python操作手机app超详细步骤,现在很多app的都要刷经验打怪升级啥的,这些枯燥千篇一律但是很耗费时间的玩法,可以使用app自动去操作,解放双手,释放时间 ...

  7. ADB操作手机的一个界面小工具(python实现)

    我们经常使用adb命令操作手机,因此我突然想到做一个界面把这些命令用界面点击的形式操作,这样可以简化我们平时敲命令的时间,工具的功能尚不完善,先总结一下思路.首先先把工具的界面展示一下: 首先讲一下工 ...

  8. ubuntu多屏协同,在电脑上操作手机

    scrcpy在电脑上操作手机 https://www.cnblogs.com/hesse-summer/p/11200260.html#scrcpy%E4%BB%8B%E7%BB%8D http:// ...

  9. autojs与java开发的手机投屏,可在电脑操作手机

    手机上的aotujs代码,主要利用截图手机屏幕转换byte[]数据用tcpip传输到电脑配合java框架jframe显示手机实时界面等 importClass(java.net.InetAddress ...

最新文章

  1. Determine whether an integer is a palindrome. Do this without extra space.
  2. python【Matlibplot绘图库】-认识Matploblib
  3. Python字典dict的增删查改及常用操作
  4. http工具类(支持https,连接池和失败重试)
  5. s matlab toolbox,Matlab Robotic Toolbox工具箱学习笔记(一 )
  6. dokuwiki mysql_dokuwiki安装和使用总结 (windows安装版本)
  7. 牛顿新定律:凭本事得到的,凭什么要还?
  8. 冒泡排序、快速排序 java代码实现
  9. [转载] python 元组tuple - python基础入门(14)
  10. linux监控任务跑满,Linux服务器带宽和CPU跑满或跑高排查
  11. whisper客服源码_深入ethereum源码-whisper协议解读
  12. [20171124]xxd与通配符.txt
  13. dreamwave php,thinkphp+dreamwaver技巧
  14. 那些花儿,从零构建Vue工程(webpack4 Eslint git hooks...)
  15. 《Android框架揭秘》——1.2节通过启动过程分析Android Framework
  16. 西门子PLC学习记录
  17. typora 免费版, 最后一个beta版本下载
  18. 蒙特卡罗方法与马尔科夫链
  19. mysql x ix_mysql – 为什么IX-lock与InnoDB中的另一个IX-lock兼容?
  20. 1到10加法创新图片-走迷宫_“小火锅+关东煮”,呷哺呷哺又创新模式!客单提到110元!...

热门文章

  1. 深入理解netty(二)Channel
  2. c语言错位机密算法,c – VS编译警告:32位移位的结果隐式转换为64位
  3. PCIE_MCC驱动阅读过程--HOST篇
  4. Oracle 12c 用户密码过期设置的一些问题
  5. Python免费教育工具 Online Python Tutor
  6. Docker 解决Operation not permitted问题
  7. 数据库-当前读与快照读
  8. UE-C++进阶之路 | Epic 大钊 视频学习记录(侵删)
  9. Eye in hand And eye on hand calibration
  10. 若依开源项目搭建自己的后台管理服务