iOS实现自动化脚本教程
Posted Cydia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS实现自动化脚本教程相关的知识,希望对你有一定的参考价值。
先看一下在触动精灵中名叫moveTo的API,
它的用法如下: moveTo(x1,y1,x2,y2,step,ms,index,stop)
参数类型必填说明
x1number是屏幕起点横坐标
y1number是屏幕起点纵坐标
x2number是屏幕终点横坐标
y2number是屏幕终点纵坐标
stepnumber否滑动速度,不写默认为 10 px
msnumber否弹起时间,不写默认为 50 毫秒
indextable/number否手指序号,仅支持函数库 v1.3.0 及其以上版本默认不写随机手指序号,推荐使用 1 - 9
stopboolean否是否解决惯性滑动,仅支持函数库 v1.3.1 及其以上版本默认 false,true - 精准滑动,解决惯性问题
那么现在我们就利用这个来实现刷视频吧,
先新建一个demo.lua文件,
然后输入一下代码
require "TSLib" -- 引入TSLib库
moveTo(100,900,100,90,20,70,1) -- 滑动屏幕
很简单,就两行代码,现在我们就来把这个脚本上传到触动精灵里面
上面的功能是用Lua语言开发的一个微信自动抢红包lua脚本,然后再结合触动精灵给予的脚本支持产生的效果。
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua的应用场景:
游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件如:mysql Proxy 和 MySQL
WorkBench
安全系统,如入侵检测系统
触动精灵的底层是 Lua 脚本语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其的基础上添加了一些扩展函数,用于取色、找色、找图、发送触摸事件等高级功能的实现只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。
触动精灵的应用场景:
编写自己App的脚本完成自动化测试
开挂刷机
微信机器人(包括开发任意应用的机器人)
因此我们可以轻易做出上面效果图的功能,但是需要移动设备必须是以下其一:
(root)越狱的ios设备
Root权限的android设备
具有Root权限的Android模拟器
提醒:Android与iOS兼容大部分函数。
模拟器连接编辑器比较麻烦,具体操作请查看官方文档。推荐使用天天模拟器,具有别的模拟器不具备的特性。
开发所需的必备工具:
具备windows环境开发
在移动设备上安装触动精灵App
IDE 脚本编辑器TouchSprite Studio
取点抓色器TSColorPicker
实现互动的具体思路是:
先查找好友的最新消息的坐标区域,
然后再从此区域中识别文字,当然识别会有误差
require("WXFriendChat")
--监听消息列表
function listenMessageList ()
while (true) do
readWithoutMessage();
mSleep(timerSleepConst);
end
end
local recordScrollerMessageList = false;
--在消息列表查找未读消息
function readWithoutMessage()
local needScroller = true;
for y = kNavBarMaxHeight+26, screenHeight-kTabBarHeght, kHomeCellHeight do
if (isColor( 133, y, 0xff4848, 85)) then
tap(133, y);
mSleep(kClickWillPushTime);
withFriendChat();
else
needScroller = false;
end
end
if needScroller then--needScroller
moveTo(200, screenHeight*0.85, 200, screenHeight*0.2, 30);
recordScrollerMessageList = true;
elseif recordScrollerMessageList then
tap(homeTabBtnsRegion(1));--如果次界面没有了未读消息,判断如果滚动过消息列表,则须滚动到顶端。
recordScrollerMessageList = false;
end
end
这里调用listenMessageList方法后执行了一个死循环,会一直监听消息列表,通过方法readWithoutMessage去实现。
这里通过查询x坐标为133的点是否为红色0xff4848,去判断这位好友是否发了新消息,若是,则点击进入,withFriendChat()方法去处理具体的聊天互动。后面判断会滑动列表继续查找有无新消息。
require("WXHelper")
--与好友持续交流
function withFriendChat()
local waitingTime = 0;
while (waitingTime < kWaitingTimeOfS) do--在聊天界面有新消息时可等待好友十秒,无消息则返回消息列表
local flag = managerFrindNewMessages();
if flag then
waitingTime = 0;
end
waitingTime = waitingTime + 1;
mSleep(1000);
end
clickBackBtn();
end
--发送meaasge
function sendMessage(message)
tap(250, screenHeight-50); -- 点击输入框
switchTSInputMethod(true); -- 切换到触动/帮你玩输入法
inputText(message) -- 输入
--switchTSInputMethod(false); -- 切换到之前的输入法
tap(screenWidth-60, screenHeight-50);--点击发送按钮
mSleep(kSendMessageTime);
end
--打开红包
function openRedPacket(y)
tap(kChatBubbleX1, y);--点击红包
mSleep(kOpenRedPacketTime);
tap((screenWidth/2.0), (screenHeight/2.0) + 150);--点击“开”
mSleep(kOpenRedPacketTime);
clickBackBtn();
end
--在聊天界面,处理与好友的交流
function managerFrindNewMessages()
if judgeIsRedPacket() then
return true;
end
local receivedMessage = recognizeFriendMessage();
if (receivedMessage == "" or receivedMessage == nil) then
return false;
end
--数据请求
local urlPath = string.format(kTuLingURL, receivedMessage);
local ret = httpGet(urlPath);
--这里就不解析html数据
local startPosition,endPosition = ret:find("<html>");
if startPosition == 1 then
return false;
end
local tem = json.decode(ret)
local code = tostring(tem.code)
if (code == "100000" or code == "40002") then
message = tostring(tem.text);
sendMessage(message);
toast("收到:"..receivedMessage.." 发送:"..message,2);
end
return true;
end
......
先看一下在触动精灵中名叫moveTo的API,
它的用法如下: moveTo(x1,y1,x2,y2,step,ms,index,stop)
参数类型必填说明
x1number是屏幕起点横坐标
y1number是屏幕起点纵坐标
x2number是屏幕终点横坐标
y2number是屏幕终点纵坐标
stepnumber否滑动速度,不写默认为 10 px
msnumber否弹起时间,不写默认为 50 毫秒
indextable/number否手指序号,仅支持函数库 v1.3.0 及其以上版本默认不写随机手指序号,推荐使用 1 - 9
stopboolean否是否解决惯性滑动,仅支持函数库 v1.3.1 及其以上版本默认 false,true - 精准滑动,解决惯性问题
那么现在我们就利用这个来实现刷视频吧,
先新建一个demo.lua文件,
然后输入一下代码
require "TSLib" -- 引入TSLib库
moveTo(100,900,100,90,20,70,1) -- 滑动屏幕
很简单,就两行代码,现在我们就来把这个脚本上传到触动精灵里面
上面的功能是用Lua语言开发的一个微信自动抢红包lua脚本,然后再结合触动精灵给予的脚本支持产生的效果。
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua的应用场景:
游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件如:MySQL Proxy 和 MySQL
WorkBench
安全系统,如入侵检测系统
触动精灵的底层是 Lua 脚本语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其的基础上添加了一些扩展函数,用于取色、找色、找图、发送触摸事件等高级功能的实现只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。
触动精灵的应用场景:
编写自己App的脚本完成自动化测试
开挂刷机
微信机器人(包括开发任意应用的机器人)
因此我们可以轻易做出上面效果图的功能,但是需要移动设备必须是以下其一:
(root)越狱的iOS设备
Root权限的Android设备
具有Root权限的Android模拟器
提醒:Android与iOS兼容大部分函数。
模拟器连接编辑器比较麻烦,具体操作请查看官方文档。推荐使用天天模拟器,具有别的模拟器不具备的特性。
开发所需的必备工具:
具备windows环境开发
在移动设备上安装触动精灵App
IDE 脚本编辑器TouchSprite Studio
取点抓色器TSColorPicker
实现互动的具体思路是:
先查找好友的最新消息的坐标区域,
然后再从此区域中识别文字,当然识别会有误差
require("WXFriendChat")
--监听消息列表
function listenMessageList ()
while (true) do
readWithoutMessage();
mSleep(timerSleepConst);
end
end
local recordScrollerMessageList = false;
--在消息列表查找未读消息
function readWithoutMessage()
local needScroller = true;
for y = kNavBarMaxHeight+26, screenHeight-kTabBarHeght, kHomeCellHeight do
if (isColor( 133, y, 0xff4848, 85)) then
tap(133, y);
mSleep(kClickWillPushTime);
withFriendChat();
else
needScroller = false;
end
end
if needScroller then--needScroller
moveTo(200, screenHeight*0.85, 200, screenHeight*0.2, 30);
recordScrollerMessageList = true;
elseif recordScrollerMessageList then
tap(homeTabBtnsRegion(1));--如果次界面没有了未读消息,判断如果滚动过消息列表,则须滚动到顶端。
recordScrollerMessageList = false;
end
end
这里调用listenMessageList方法后执行了一个死循环,会一直监听消息列表,通过方法readWithoutMessage去实现。
这里通过查询x坐标为133的点是否为红色0xff4848,去判断这位好友是否发了新消息,若是,则点击进入,withFriendChat()方法去处理具体的聊天互动。后面判断会滑动列表继续查找有无新消息。
require("WXHelper")
--与好友持续交流
function withFriendChat()
local waitingTime = 0;
while (waitingTime < kWaitingTimeOfS) do--在聊天界面有新消息时可等待好友十秒,无消息则返回消息列表
local flag = managerFrindNewMessages();
if flag then
waitingTime = 0;
end
waitingTime = waitingTime + 1;
mSleep(1000);
end
clickBackBtn();
end
--发送meaasge
function sendMessage(message)
tap(250, screenHeight-50); -- 点击输入框
switchTSInputMethod(true); -- 切换到触动/帮你玩输入法
inputText(message) -- 输入
--switchTSInputMethod(false); -- 切换到之前的输入法
tap(screenWidth-60, screenHeight-50);--点击发送按钮
mSleep(kSendMessageTime);
end
--打开红包
function openRedPacket(y)
tap(kChatBubbleX1, y);--点击红包
mSleep(kOpenRedPacketTime);
tap((screenWidth/2.0), (screenHeight/2.0) + 150);--点击“开”
mSleep(kOpenRedPacketTime);
clickBackBtn();
end
--在聊天界面,处理与好友的交流
function managerFrindNewMessages()
if judgeIsRedPacket() then
return true;
end
local receivedMessage = recognizeFriendMessage();
if (receivedMessage == "" or receivedMessage == nil) then
return false;
end
--数据请求
local urlPath = string.format(kTuLingURL, receivedMessage);
local ret = httpGet(urlPath);
--这里就不解析html数据
local startPosition,endPosition = ret:find("<html>");
if startPosition == 1 then
return false;
end
local tem = json.decode(ret)
local code = tostring(tem.code)
if (code == "100000" or code == "40002") then
message = tostring(tem.text);
sendMessage(message);
toast("收到:"..receivedMessage.." 发送:"..message,2);
end
return true;
end
......
操作前准备:
1.系统版本在IOS11~14的苹果手机 2.已安装爱思助手的电脑 3.苹果数据线
开始操作:
(1)使用爱思助手对苹果手机进行越狱,或者使用一切可以把手机越狱的方法(可自行百度),越狱后你会在手机上看到一个叫Cydia的APP,打开APP,找到“软件源”,“编辑”--“添加”--源下载
把免费版的按键精灵安装包
(iOS 按键精灵免费版 1.3.8 1.3.6 旧版本 deb安装包)
放到这个路径中:Cydia安装deb路径 /private/var/root/Media/Cydia/AutoInstall ,到此操作基本完成
只需要重启手机即可完成软件的自动安装,如需免费版的按键精灵(1.3.8.deb),可点我找到,免费版正常可兼容ios11~13,最新版为1.6.0为付费版,可直接通过按键精灵官方源进行下载
Windows上很久以前就有按键精灵,Mac上也可以实现类似功能,
以下一个小demo演示了如何去实现鼠标和键盘操作的自动化。
一、新建Mac应用,代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSButton* button = [[NSButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
button.target = self;
button.action = @selector(buttonClick);
[self.view addSubview:button];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.mas_equalTo(100);
make.right.bottom.mas_equalTo(-100);
}];
}
- (void)buttonClick
{
CGPoint pt = CGPointMake(216, 80);
PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseDown, pt);
PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseUp, pt);
sleep(2);
[self writeString:@"Hello" withFlags:0];
}
void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point)
{
CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button);
CGEventSetType(theEvent, type);
CGEventPost(kCGHIDEventTap, theEvent);
CFRelease(theEvent);
}
-(void)writeString:(NSString *)valueToSet withFlags:(int)flags
{
UniChar buffer;
CGEventRef keyEventDown = CGEventCreateKeyboardEvent(NULL, 1, true);
CGEventRef keyEventUp = CGEventCreateKeyboardEvent(NULL, 1, false);
CGEventSetFlags(keyEventDown,0);
CGEventSetFlags(keyEventUp,0);
for (int i = 0; i < [valueToSet length]; i++) {
[valueToSet getCharacters:&buffer range:NSMakeRange(i, 1)];
CGEventKeyboardSetUnicodeString(keyEventDown, 1, &buffer);
CGEventSetFlags(keyEventDown,flags);
CGEventPost(kCGSessionEventTap, keyEventDown);
CGEventKeyboardSetUnicodeString(keyEventUp, 1, &buffer);
CGEventSetFlags(keyEventUp,flags);
CGEventPost(kCGSessionEventTap, keyEventUp);
}
CFRelease(keyEventUp);
CFRelease(keyEventDown);
}
二、通过AppleScript实现:
activate application "Finder"
tell application "System Events"
tell process "Finder"
click at {15, 2}
end tell
end tell
1. 打码平台:http://www.fateadm.com/
2. 短信验证接收:http://www.51ym.me/
手机模拟器和按键精灵安装完毕后,使用按键精灵助手连接模拟,模拟器授权给精灵就可以正常调试了。
这里也可以安装其他夜神模拟器等,或者直接USB连接手机,如果需要在真机上调试脚本需要手机安装了“按键精灵安卓版”和有ROOT权限。
同时PC的按键精灵手机助手也可以将写好的脚本以及控制的UI界面打包成APK/ipa,目前是需要登录办理会员才可以,如果没有其他要求完全就在模拟器上运行脚本也可以。
实践步骤
1. 获取需要打开APP的包名,以下打开的是趣头条APP。
Dim bundleName
bundleName = Sys.GetFront()
TracePrint bundleName
2. 完全关闭APP后再打开,以下可以理解是重启。
Sys.ClearAppCache "com.baidu.baijia" //先关闭当前百家号APP
Delay 1000
RunApp "com.baidu.baijia" //延时1秒打开百家号
3. 使用“抓抓”找特定图点进入需要跳转的页面。
Delay 3000
Dim intX,intY
FindPic 0,0,0,0,"Attachment:截图1.png","000000",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
TracePrint intX,intY
Tap intX,intY //点击该图的坐标进入
Else
TracePrint "没有找到"
End If
3.1. 打开“抓抓->截图->裁剪->框选区域->确定->保存->存放到电脑某处”。
3.2. 在抓抓中可以区域找图测试截图,结果不是-1一般成功找到坐标,可以复制脚本。
4. 关闭抓抓,先将截图添加到附件,再将复制的脚本粘贴到脚本框。
5. 将对应的截图添加好,脚本做好就可以调试。
Sys.ClearAppCache "com.baidu.baijia"
Delay 1000
RunApp "com.baidu.baijia"
Delay 3000
Dim intX,intY
FindPic 0,0,0,0,"Attachment:截图1.png","000000",0,0.9,intX,intY
If intX > -1 And intY > -1 Then
TracePrint intX,intY
Tap intX,intY
Else
TracePrint "没有找到"
End If
Delay 9000
Dim intX1, intY1
FindPic 0,0,0,0,"Attachment:截图2.png","000000",0,0.9,intX1,intY1
If intX1 > -1 And intY1 > -1 Then
TracePrint intX1,intY1
Tap intX1, intY1
InputText "13922895736"
Else
TracePrint "没有找到"
End If
6. 屏幕自动向下滑动。
//用300毫秒的时间,从点100,100划动到点200,200
Swipe 300, 400, 300, -5000, 50
//Delay 100
//以下是多点触控的例子
//TouchDown 100, 200, 1//按住屏幕上的100,100坐标不放,并设置此触点ID=1
//TouchMove 300, -600, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标
//TouchUp 1//松开弹起ID=1的触点
附:如果完全自动化登录或自动化注册,就需要上面的一个打码或者短信验证码接收了,
如果是短信就接入后面的输入手机号请求接口获取短信验证码然后输入再请求。
如果是图形验证码需要接入打码平台通过上传验证码图片后获取图形码再请求,
如果是滑块验证网上有实现的案例。
iOS自动化教程群
以上是关于iOS实现自动化脚本教程的主要内容,如果未能解决你的问题,请参考以下文章