今热点:是我小看这台旧手机了!
大家好,我是 Jack。
上个月发布了一期视频,里面用到了代码操控手机的自动化技巧。
今天就详细聊下,我是怎么做的。
(相关资料图)
Scrcpy,全称 screen copy,是一款开源的手机无线投屏软件。
而且还是跨平台的,无论是在 Linux、Windows 还是 macOS 上都能使用。
项目地址:
https://github.com/Genymobile/scrcpy
这里以 Windows 为例,安装起来非常简单:
直接下载安装包并解压就行,里面还带了adb调试工具。
然后添加一下系统的环境变量。
用 USB 线连接手机和电脑,将手机调整为开发者模式。
这样,在电脑上运行 Scrcpy 指令:
scrcpy
就能将手机画面投放到电脑上了。
我们可以通过这个投放的画面,在电脑上,操纵这台手机。
但是,如果想要让代码自动化控制,那就还需要另外一款工具。
uiautomator2UiAutomator 是 Google 提供的用来做安卓自动化测试的一个 Java 库,基于 Accessibility 服务。功能很强,可以对第三方 App 进行测试,获取屏幕上任意一个 APP 的任意一个控件属性,并对其进行任意操作,但有两个限制:
测试脚本只能使用 Java 语言测试脚本要打包成 jar 或者 apk 包上传到设备上才能运行于是有了 UiAutomator2,逻辑可以用 Python 编写,能够在电脑上控制手机。
项目地址:
https://github.com/openatx/uiautomator2
安装方法也非常简单,直接 pip 安装即可,不过为了方便环境的管理,还是先创建一个 Conda 虚拟环境。
condacreate-nandroid
然后激活这个虚拟环境:
condaactivateandroid
安装 uiautomator2 和 weditor。
python-mpipinstalluiautomator2weditor
然后用手机打开想要操控的 App,比如 BiliBili,打开软件后,使用 Weditor 审查元素。
python-mweditor
这样就开启了一个 Web 界面,在这个界面里,能够审查元素,定位一些想要点击的点。
比如我想要给一个视频三连,那就审查三连的元素,然后将操作用代码流程化。
importuiautomator2asu2importtimefromPILimportImageimportcv2importnumpyasnpall_videos=[]defget_images(device):views=device.xpath("//*[@resource-id="tv.danmaku.bili:id/recycler_view"]/android.view.ViewGroup/android.widget.FrameLayout[1]")foridx,view_boxinenumerate(views.all()[:5]):print("视频{}封面的中心坐标:".format(idx+1),view_box.center())image=view_box.screenshot()image.save("{}.jpg".format(idx+1))all_videos.append(view_box)defrefresh(device):device.swipe_ext("down")deflike_the_video(device):like_icon=device.xpath("//*[@resource-id="tv.danmaku.bili:id/recommend_icon"]")like_icon.click()print("视频点赞成功")defpay_for_the_video(device):coin_icon=device.xpath("//*[@resource-id="tv.danmaku.bili:id/coin_icon"]")coin_icon.click()time.sleep(0.1)pay_icon=device.xpath("//*[@resource-id="tv.danmaku.bili:id/pay_coins"]")pay_icon.click()print("视频投币成功")deffollow_the_up(device):follow_icon=device.xpath("//*[@resource-id="tv.danmaku.bili:id/follow"]")follow_icon.click()print("关注成功")defback(device):back_icon=device.xpath("//*[@content-desc="转到上一层级"]")back_icon.click()print("已退出视频")if__name__=="__main__":_DEVICE_ID="da317199"d=u2.connect(_DEVICE_ID)#connecttodeviceget_images(d)all_videos[3].click()print("点进去了!")time.sleep(0.1)like_the_video(d)time.sleep(0.1)pay_for_the_video(d)time.sleep(0.1)follow_the_up(d)
效果是这样的:
代码里有个 device_id 可以通过 adb 工具查询,手机连接电脑后,再用如下指令查询:
adbdevices
根据这个设备号,就能操纵这台手机。
絮叨这东西,还能用来做什么?
你知道,为啥抢茅台你总抢不到吗?抢个演唱会门票抢不到?挂号挂不到?
票贩子为啥总能抢到票?
很多平台限制必须手机上抢,这个时候,这项技术就能排上用场了。
我只能帮你到这了,剩下的,可以自己慢慢体验。
所以,家里的旧手机不要扔!写个脚本,能帮你干很多事~
对了,上周说会出一期新视频,这个周末应该能做完。
上个周末高中老同学聚会,都是“小镇做题家”,来到北京工作,一晃也都老大不小了。
有在国企工作的,钱虽少点,但很安逸,没有裁员。有在私企打拼的,钱虽多点,但频繁跳槽,压力也蛮大。
能聚一次,很不容易,所以耽搁了点时间,望海涵~
好了,今天就聊这么多吧。
我是 Jack,我们下期见~
• AI杀疯了,NovelAI开源• 巧了,这几个项目,我王多鱼投(喂)了!•今年这情况。。咱还是留个心眼吧
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...