iOS实现自动化脚本教程

Posted Cydia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS实现自动化脚本教程相关的知识,希望对你有一定的参考价值。


先看一下在触动精灵中名叫moveTo的API,

它的用法如下: moveTo(x1,y1,x2,y2,step,ms,index,stop)参数类型必填说明x1number是屏幕起点横坐标y1number是屏幕起点纵坐标x2number是屏幕终点横坐标y2number是屏幕终点纵坐标stepnumber否滑动速度,不写默认为 10 pxmsnumber否弹起时间,不写默认为 50 毫秒indextable/number否手指序号,仅支持函数库 v1.3.0 及其以上版本默认不写随机手指序号,推荐使用 1 - 9stopboolean否是否解决惯性滑动,仅支持函数库 v1.3.1 及其以上版本默认 false,true - 精准滑动,解决惯性问题

那么现在我们就利用这个来实现刷视频吧,

先新建一个demo.lua文件,

然后输入一下代码

iOS实现自动化脚本教程

require "TSLib" -- 引入TSLib库moveTo(100,900,100,90,20,70,1) -- 滑动屏幕

很简单,就两行代码,现在我们就来把这个脚本上传到触动精灵里面 

iOS实现自动化脚本教程


    上面的功能是用Lua语言开发的一个微信自动抢红包lua脚本,然后再结合触动精灵给予的脚本支持产生的效果。


    Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

    Lua的应用场景:


    游戏开发

    独立应用脚本

    Web 应用脚本

    扩展和数据库插件如:mysql Proxy 和 MySQL

    WorkBench

    安全系统,如入侵检测系统

    触动精灵的底层是 Lua 脚本语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其的基础上添加了一些扩展函数,用于取色、找色、找图、发送触摸事件等高级功能的实现只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

iOS实现自动化脚本教程


     触动精灵的应用场景:


     编写自己App的脚本完成自动化测试

     开挂刷机

     微信机器人(包括开发任意应用的机器人)

     因此我们可以轻易做出上面效果图的功能,但是需要移动设备必须是以下其一:


     (root)越狱的ios设备

     Root权限的android设备

     具有Root权限的Android模拟器

     提醒:Android与iOS兼容大部分函数。

     模拟器连接编辑器比较麻烦,具体操作请查看官方文档。推荐使用天天模拟器,具有别的模拟器不具备的特性。

     



    开发所需的必备工具:


     具备windows环境开发

     在移动设备上安装触动精灵App

     IDE 脚本编辑器TouchSprite Studio

     取点抓色器TSColorPicker


     


实现互动的具体思路是:

  1.  先查找好友的最新消息的坐标区域,

  2. 然后再从此区域中识别文字,当然识别会有误差

    require("WXFriendChat")


    --监听消息列表

    function listenMessageList ()

        while (truedo

            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, 0xff484885)) then

                tap(133,  y);

                mSleep(kClickWillPushTime);

                withFriendChat();

            else

                needScroller = false;

            end

        end

        

        if needScroller then--needScroller

            moveTo(200, screenHeight*0.85200, screenHeight*0.230);

            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


    ......


iOS实现自动化脚本教程



iOS实现自动化脚本教程

iOS实现自动化脚本教程


先看一下在触动精灵中名叫moveTo的API,

它的用法如下: moveTo(x1,y1,x2,y2,step,ms,index,stop)参数类型必填说明x1number是屏幕起点横坐标y1number是屏幕起点纵坐标x2number是屏幕终点横坐标y2number是屏幕终点纵坐标stepnumber否滑动速度,不写默认为 10 pxmsnumber否弹起时间,不写默认为 50 毫秒indextable/number否手指序号,仅支持函数库 v1.3.0 及其以上版本默认不写随机手指序号,推荐使用 1 - 9stopboolean否是否解决惯性滑动,仅支持函数库 v1.3.1 及其以上版本默认 false,true - 精准滑动,解决惯性问题

那么现在我们就利用这个来实现刷视频吧,

先新建一个demo.lua文件,

然后输入一下代码

require "TSLib" -- 引入TSLib库moveTo(100,900,100,90,20,70,1) -- 滑动屏幕

很简单,就两行代码,现在我们就来把这个脚本上传到触动精灵里面 

iOS实现自动化脚本教程


    上面的功能是用Lua语言开发的一个微信自动抢红包lua脚本,然后再结合触动精灵给予的脚本支持产生的效果。


    Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

    Lua的应用场景:


    游戏开发

    独立应用脚本

    Web 应用脚本

    扩展和数据库插件如:MySQL Proxy 和 MySQL

    WorkBench

    安全系统,如入侵检测系统

    触动精灵的底层是 Lua 脚本语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其的基础上添加了一些扩展函数,用于取色、找色、找图、发送触摸事件等高级功能的实现只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

iOS实现自动化脚本教程


     触动精灵的应用场景:


     编写自己App的脚本完成自动化测试

     开挂刷机

     微信机器人(包括开发任意应用的机器人)

     因此我们可以轻易做出上面效果图的功能,但是需要移动设备必须是以下其一:


     (root)越狱的iOS设备

     Root权限的Android设备

     具有Root权限的Android模拟器

     提醒:Android与iOS兼容大部分函数。

     模拟器连接编辑器比较麻烦,具体操作请查看官方文档。推荐使用天天模拟器,具有别的模拟器不具备的特性。

     



    开发所需的必备工具:


     具备windows环境开发

     在移动设备上安装触动精灵App

     IDE 脚本编辑器TouchSprite Studio

     取点抓色器TSColorPicker


     


实现互动的具体思路是:

  1.  先查找好友的最新消息的坐标区域,

  2. 然后再从此区域中识别文字,当然识别会有误差

    require("WXFriendChat")


    --监听消息列表

    function listenMessageList ()

        while (truedo

            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, 0xff484885)) then

                tap(133,  y);

                mSleep(kClickWillPushTime);

                withFriendChat();

            else

                needScroller = false;

            end

        end

        

        if needScroller then--needScroller

            moveTo(200, screenHeight*0.85200, screenHeight*0.230);

            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


    ......


iOS实现自动化脚本教程



iOS实现自动化脚本教程


iOS实现自动化脚本教程

操作前准备:


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为付费版,可直接通过按键精灵官方源进行下载

iOS实现自动化脚本教程



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 tellend tell

1. 打码平台:http://www.fateadm.com/

2. 短信验证接收:http://www.51ym.me/

手机模拟器和按键精灵安装完毕后,使用按键精灵助手连接模拟,模拟器授权给精灵就可以正常调试了。

这里也可以安装其他夜神模拟器等,或者直接USB连接手机,如果需要在真机上调试脚本需要手机安装了“按键精灵安卓版”和有ROOT权限。

iOS实现自动化脚本教程

同时PC的按键精灵手机助手也可以将写好的脚本以及控制的UI界面打包成APK/ipa,目前是需要登录办理会员才可以,如果没有其他要求完全就在模拟器上运行脚本也可以。

实践步骤

1. 获取需要打开APP的包名,以下打开的是趣头条APP。

 
   
   
 
  1. Dim bundleName

  2. bundleName = Sys.GetFront()

  3. TracePrint bundleName

iOS实现自动化脚本教程

2. 完全关闭APP后再打开,以下可以理解是重启。

 
   
   
 
  1. Sys.ClearAppCache "com.baidu.baijia" //先关闭当前百家号APP

  2. Delay 1000

  3. RunApp "com.baidu.baijia" //延时1秒打开百家号

3. 使用“抓抓”找特定图点进入需要跳转的页面。

 
   
   
 
  1. Delay 3000

  2. Dim intX,intY

  3. FindPic 0,0,0,0,"Attachment:截图1.png","000000",0,0.9,intX,intY

  4. If intX > -1 And intY > -1 Then

  5. TracePrint intX,intY

  6. Tap intX,intY //点击该图的坐标进入

  7. Else

  8. TracePrint "没有找到"

  9. End If

3.1. 打开“抓抓->截图->裁剪->框选区域->确定->保存->存放到电脑某处”。

iOS实现自动化脚本教程

iOS实现自动化脚本教程

iOS实现自动化脚本教程

3.2. 在抓抓中可以区域找图测试截图,结果不是-1一般成功找到坐标,可以复制脚本。

iOS实现自动化脚本教程

iOS实现自动化脚本教程

4. 关闭抓抓,先将截图添加到附件,再将复制的脚本粘贴到脚本框。

iOS实现自动化脚本教程

5. 将对应的截图添加好,脚本做好就可以调试。

 
   
   
 
  1. Sys.ClearAppCache "com.baidu.baijia"

  2. Delay 1000

  3. RunApp "com.baidu.baijia"


  4. Delay 3000

  5. Dim intX,intY

  6. FindPic 0,0,0,0,"Attachment:截图1.png","000000",0,0.9,intX,intY

  7. If intX > -1 And intY > -1 Then

  8. TracePrint intX,intY

  9. Tap intX,intY

  10. Else

  11. TracePrint "没有找到"

  12. End If


  13. Delay 9000

  14. Dim intX1, intY1

  15. FindPic 0,0,0,0,"Attachment:截图2.png","000000",0,0.9,intX1,intY1

  16. If intX1 > -1 And intY1 > -1 Then

  17. TracePrint intX1,intY1

  18. Tap intX1, intY1

  19. InputText "13922895736"

  20. Else

  21. TracePrint "没有找到"

  22. End If

iOS实现自动化脚本教程

6. 屏幕自动向下滑动。

 
   
   
 
  1. //用300毫秒的时间,从点100,100划动到点200,200

  2. Swipe 300, 400, 300, -5000, 50

  3. //Delay 100


  4. //以下是多点触控的例子

  5. //TouchDown 100, 200, 1//按住屏幕上的100,100坐标不放,并设置此触点ID=1

  6. //TouchMove 300, -600, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标

  7. //TouchUp 1//松开弹起ID=1的触点

附:如果完全自动化登录或自动化注册,就需要上面的一个打码或者短信验证码接收了,

如果是短信就接入后面的输入手机号请求接口获取短信验证码然后输入再请求。

如果是图形验证码需要接入打码平台通过上传验证码图片后获取图形码再请求,

如果是滑块验证网上有实现的案例。

iOS自动化教程群



以上是关于iOS实现自动化脚本教程的主要内容,如果未能解决你的问题,请参考以下文章

iOS自动化脚本教程

SQL Prompt7.2下载及破解教程

自动化脚本iOS教程

代码片段:Shell脚本实现重复执行和多进程

iOS 工程自动化 - Ruby 入门到辅助脚本编写

图文教程自动登录expect脚本实例