网站首页 > 博客文章 正文
导读:本文主要讨论利用安卓模拟器实现网页二维码扫描登录,主要基于以下技术来实现自动化登录。
- AirtestProject(APP 内元素定位)
- adb(桥梁)
- 安卓模拟器(运行 APP)
- playwright-python(网页自动化)
adb
Android Debug Bridge (adb) 是一种功能多样的命令行工具,可与设备进行通信。adb 命令可用于执行各种设备操作,例如安装和调试应用。当启动某个 adb client 时,该客户端会先检查是否有 adb server 进程已在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb client 发出的命令。adb server 会与所有正在运行的设备建立连接。后续就可以通过 adb 命令来访问和操作这些设备。
// adb 下载
https://developer.android.com/tools/releases/platform-tools?spm=5176.28103460.0.0.297c5d275YV4Te&hl=zh-cn
// 环境变量配置(win10)
打开“控制面板”或“设置” -> “系统” -> “关于” -> “高级系统设置” -> PATH 加入
D:\Program Files\platform-tools-latest-windows\platform-tools
// 验证
adb version
安卓模拟器
安卓模拟器有很多,如 Bluestacks(蓝叠)、LDPlayer(雷电模拟器)等。这里笔者使用的是蓝叠模拟器(部分 APP 会检测识别特定的模拟器),它支持自定义控制配置,多开,脚本编写等功能。安装好模拟器后需要开启支持 adb 调试。
// 查看设备连接情况
adb devices -l
// 打印如下
List of devices attached
emulator-5554 device // 每个模拟器占用两个端口,奇数给控制台连接,偶数给 adb 连接, 状态 device 表示已经连上
//如果配置正确但是 adb 识别不到,则可通过重启 adb 解决
adb kill-server
在模拟器上预先下载好 APP,并登陆好账号。模拟器如果运行比较卡,可做适当调整。
AirtestProject
是一个跨平台的UI自动化框架,此处笔者用于定位安卓APP上的元素。它提供了一个 IDE ,其支持自动化脚本录制,可以录制我们的操作并生成相应的代码和文件,十分方便。后续可将这些生成的代码嵌入到我们自己的 python 程序中。关于详细的操作可自行查阅官方文档。
它主要由以下三部分组成:
- Airtest 基于图像识别的自动化测试框架
- Poco 基于 UI 控件识别的自动化测试框架
- AirtestIDE 编辑器
将生成代码嵌入到我们的 python 代码中时需要安装相应的库(注意 python 版本 <= 3.9)
// 安装Airtest框架
pip install airtest
// 安装Poco框架;编写了Poco语句就需要安装
pip install pocoui
实践:结合 playwright-python 实现打开网页自动扫码登陆的思路
playwright-python 是一个 Python 库用于浏览器自动化操作,首先我们可以基于它实现打开浏览器,跳转到指定网站,并模拟点击直到扫码登陆界面。接下来对二维码进行截图,并通过 adb 命令推送到模拟器上(注意,push 后模拟器相册不会立马更新,需要 broadcast 广播一下)。接下来通过 adb 连接模拟器并实现 APP 扫码操作(打开扫码界面 - 从相册中选择照片),这些 APP 定位和操作元素代码均可借助 AirtestProject 协助生成。
部分参考代码如下:
# 截图
filename = generate_uuid_string(13) + ".png"
source_path = "D:/PythonProject/Temp/images/" + filename
target_path = "/sdcard/DCIM/Camera/" + filename
broadcast_path = "file:///sdcard/DCIM/Camera/" + filename
await page.screenshot(path=source_path)
await asyncio.sleep(3)
# 推送到模拟器上
adn_command = "adb -s emulator-5554 push " + source_path + " " + target_path
subprocess.run(adn_command, capture_output=True, text=True, shell=True)
# push后相册没有立马更新,需要广播一下
adn_command = "adb -s emulator-5554 shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d " + broadcast_path
subprocess.run(adn_command, capture_output=True, text=True, shell=True)
# 连接设备
auto_setup(__file__, devices=["android://127.0.0.1:5037/127.0.0.1:5555"])
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
# 进入到扫码界面
touch(Template(r"../images/tpl1726731649836.png", record_pos=(-0.458, -0.811), resolution=(900, 1600)))
await asyncio.sleep(2)
touch(Template(r"../images/tpl1726732113466.png", record_pos=(-0.031, -0.803), resolution=(900, 1600)))
await asyncio.sleep(2)
touch(Template(r"../images/tpl1726732129931.png", record_pos=(0.279, 0.72), resolution=(900, 1600)))
# 选取第一张二维码进行扫码
await asyncio.sleep(2)
poco("com.ss.android.ugc.aweme:id/ni6").click()
# 同意
await asyncio.sleep(2)
touch(Template(r"../images/tpl1727151787833.png", record_pos=(-0.014, 0.701), resolution=(900, 1600)))
相关文档
蓝叠:https://www.bluestacks.cn/keymaping.html
AirtestProject :https://airtest.doc.io.netease.com/tutorial/1_quick_start_guide/
如何脱离AirtestIDE跑自动化脚本:https://airtest.doc.io.netease.com/IDEdocs/faq/0_no_airtestide/
ADB:https://developer.android.com/tools/adb?spm=5176.28103460.0.0.297c5d275YV4Te&hl=zh-cn#options
playwright-python:https://github.com/microsoft/playwright-python
猜你喜欢
- 2024-12-08 软件测试|PC端应用自动化最佳解决方案——Pywinauto
- 2024-12-08 基于Python制作回合制手游外挂简单教程(中)
- 2024-12-08 3种方式自动化控制APP
- 2024-12-08 iOS 自动化测试踩坑(一): 技术方案、环境配置与落地实践
- 2024-12-08 Airtest入门及多设备管理总结
- 2024-12-08 如何使用 Python Nornir 实现基于 CLI 的网络自动化?
- 2024-12-08 初学系列-Python数据分析:探索在Excel使用Pyxll第2编
- 2024-12-08 RPA技术uipath分享
- 2024-12-08 使用Python自动化Microsoft Excel和Word
- 2024-12-08 python 你需要知道的
你 发表评论:
欢迎- 08-03 Docker 命令入门实战:搞懂这些才算真正入门!
- 08-03Docker 常用命令分类汇总
- 08-03docker常用命令大全,看这一篇就够了
- 08-03Docker命令大全详解(39个常用命令)
- 08-03Docker 常用命令手册
- 08-03Docker命令最全详解(39个最常用命令)
- 08-03Docker命令最全详解(29个最常用命令)
- 08-03C++语法进阶-字符:字符变量(char)
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)