Golang Go语言中如何使用来控制你的 iOS 设备
Golang Go语言中如何使用来控制你的 iOS 设备
有兴趣的小伙伴可以玩一玩哈~
https://github.com/ElectricBubble/gwda
Golang 实现的 WebDriverAgent 客户端库,可以使用 Golang 控制 iOS 设备,实现 UI 自动化操作。(无需越狱)
参考 facebook-wda (python): https://github.com/openatx/facebook-wda
几乎完成了 appium/WebDriverAgent 的全部命令(部分 tvOS
的因为没环境测试。。就暂时放弃了)
放一个示例代码的执行 GIF
😳其实执行速度还可以,只是 GIF 压缩感觉卡顿
下面是示例代码的执行输出:
2020/05/10 00:02:00 Name: TEST’s iPhone
2020/05/10 00:02:00 IsSimulator: false
2020/05/10 00:02:00 UIKit Size (Points): 375 x 667
2020/05/10 00:02:01 UIKit Scale factor: 2
2020/05/10 00:02:01 Native Resolution (Pixels): 750 x 1334
2020/05/10 00:02:02 Status bar size: 375 x 20
2020/05/10 00:02:02 State: Plugged in, at 100%
2020/05/10 00:02:02 Level: 100%
2020/05/10 00:02:02 该 App 未运行, 开始打开 App: com.apple.Preferences
2020/05/10 00:02:04 使当前 App 退回 主屏幕, 并至少等待 3s 后(默认等待时间)再切换到前台
2020/05/10 00:02:09 当前 App 的 PID: 3616
2020/05/10 00:02:33 搜索输入框 的截图图片格式: png
2020/05/10 00:02:33 搜索输入框 的截图图片大小(像素): (594,72)
2020/05/10 00:02:37 共找到 3 个搜索结果
2020/05/10 00:02:48 当前屏幕第一个 App/文件夹 的文本内容: “自带”文件夹
2020/05/10 00:02:48 该 App/文件夹 的坐标和大小: {
"y" : 26,
"x" : 199,
"width" : 64,
"height" : 88
}
2020/05/10 00:02:57 Orientation: Device oriented vertically, home button on the bottom
2020/05/10 00:02:57 Rotation: {
"x" : 0,
"y" : 0,
"z" : 0
}
更多关于Golang Go语言中如何使用来控制你的 iOS 设备的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
大部分的操作都能模拟?获取元素位置,点击指定 app,回到主页,下滑上推这些
更多关于Golang Go语言中如何使用来控制你的 iOS 设备的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
WDA
支持的命令全都可以的哟 😬
// 查找符合条件第一个元素
session.FindElement()
// 查找符合条件的全部元素
session.FindElements()
// 查找指定元素的子元素(符合条件的第一个)
element.FindElement()
// 查找指定元素的子元素(符合条件的全部元素)
element.FindElements()
// 获取元素的坐标和宽高
elemIcon.Rect()
// 启动指定 app
session.AppLaunch()
// 回到主页
client.Homescreen()
// 上滑
session.SwipeUp()
项目的示例代码基本上都用到了这些基本命令哈
请问能输入用户密码登陆吗,然后如果弹出警告点确认,这些都能做到不
iOS 非越狱群控指日可待?[狗头]
原理是啥?
安卓的残疾人功能还真挺好,不过 autojs 最后转成收费,可惜
弹窗也可以手动 /自动处理
⬇️ 弹窗自动处理 ⬇️
// 在连接设备的时候,追加一个 “true” 参数,用于在连接设备时,预设“允许 /拒绝”的选择器
// 允许: **/XCUIElementTypeButton[label IN {'允许','好','仅在使用应用期间','暂不'}
]
// 拒绝: **/XCUIElementTypeButton[label IN {'不允许','暂不'}
]
gwda.NewClient(“http://localhost:8100”, true)
// 👆 也可以选择不再连接设备时去预设选择器
// 通过下面两个函数也可以在创建 session 之前设置好想要设置的弹窗按钮选择器
// client.SetAcceptAlertButtonSelector()
// client.SetDismissAlertButtonSelector()
// 创建 session 时,设置当 Alert 出现时的默认处理行为( Accept/Dismiss )
// gwda.WDASessionAlertActionAccept
client.NewSession(
gwda.NewWDASessionCapability(bundleId).
SetDefaultAlertAction(gwda.WDASessionAlertActionAccept))
⬇️ 手动处理使用以下相关函数 ⬇️
// 获取弹窗的内容
session.AlertText()
// 在弹窗里的输入框输入内容
session.AlertSendKeys()
// 获取弹窗的全部按钮
session.AlertButtons()
// 点击指定“名称”的“yes”按钮
session.AlertAccept()
// 点击指定“名称”的“no”按钮
session.AlertDismiss()
多谢~
简单粗暴的理解就是
gwda 发 HTTP 请求给 appium/WebDriverAgent ( forked from facebookarchive/WebDriverAgent )
WebDriverAgent 利用苹果提供的测试框架 XCTest.framework 进行设备的各种操作命令
已经有好些个厂商做到了。。。
厉害厉害!因为不接触这个,还真是孤陋寡闻了,哈哈。
其实厉害的还是 Facebook 那帮子人
得亏他们写出来了 WDA ( WebDriverAgent )
不是吧 我找这个找了好久 但是不会 go 啊 我去
有 python 版本的话
感谢分享,先 star
😁 觉得好玩就行
请教下 appium 也是用 wda, macacajs 用他们自己写的 XCTestWD
为啥他们都需要 app or bundleId 配置, 如果只是控制手机, 这里 app or bundleid 应该填啥
这跟自带的 XCUITest 有啥区别吗?
appium/WebDriverAgent 和 前面同学提到的 macacajs/XCTestWD 本质上都是使用的苹果的测试框架哈
这就好比是其实大家都可以通过浏览器的开发者模式的 控制台 输入对应的 js 实现页面元素的点击 /输入等操作
但是却出现了 selenium,然后觉得真香😃
稳,空了来试试
🤪再增加个搜图功能,那就可以更好玩了
搜图? 怎么玩儿?
// 这三个都拥有三种截图函数
client.ScreenshotToImage()
session.ScreenshotToDisk()
element.Screenshot()
client/session 都可以截图整个屏幕
有了“大图”,然后拿出你想要点击位置的“小图”,
就可以 “大图” 里 “小图”,并对应的找到 “小图” 所在的坐标
然后就可以让 gwda 去点击啦
不过这块儿我还在考虑该咋弄。。
直接上 opencv 的话。。会不会有点大材小用?
但的确后面可能需要 opencv 的 sift 算法,可以做到一张图在不同缩放的分辨率图片上找到“小图”
🍻 更新了 gwda 的扩展库 [gwda-ext-opencv]( https://github.com/electricbubble/gwda-ext-opencv)
可直接通过指定图片进行操作啦
666~
话说为什么我看到这玩意儿的第一反映是 可以拿来在 iOS 上自动刷强国?
哈哈哈哈,也是可以的哈
配合上 gwda-ext-opencv 就可以在刷游戏了
很 cool !
在Golang(Go语言)中直接控制iOS设备并不是一项内置功能,因为Go语言本身并没有专门的库或API来直接与iOS设备进行通信。然而,你可以通过一些间接的方式来实现这个目标,比如使用第三方库或工具来与iOS设备交互。
一种常见的方法是使用Apple提供的libimobiledevice库,这是一套开源的库,允许你在Linux和macOS上与iOS设备进行通信。虽然libimobiledevice是用C语言编写的,但你可以通过cgo在Go语言中调用C代码,从而间接使用这些功能。
另一种方法是利用Apple的iTunes或其他iOS管理工具提供的接口,这些工具通常提供了一些命令行选项,你可以通过Go语言的os/exec包来执行这些命令,并解析它们的输出。
此外,如果你需要更高级的控制,比如发送触摸事件或获取设备的实时状态,你可能需要编写一个运行在iOS设备上的原生应用,并通过网络(如HTTP、WebSocket等)与Go语言后端进行通信。
总的来说,虽然Go语言没有直接控制iOS设备的内置功能,但你可以通过一些间接的方法和工具来实现这一目标。不过,这些方法的实现可能会比较复杂,并且需要你对iOS设备和Go语言都有一定的了解。如果你有更具体的需求或问题,建议查阅相关的文档和社区资源,或者考虑寻求专业的帮助。