思路代码(还是以前的旧代码 并且只是思路代码 无法直接使用)
//例子:遍历读取账号文件内容 并且具备记忆功能 自动从上次的位置开始 不是粗暴的执行一个删除一个账号的处理 而是把记忆写到脚本配置里面
//1.读取账号文件内容
//2.对账号文件做基础的判断和处理 文件是否存在 内容是否对 是否去掉了可能的Bom头和乱码 去掉空行等等 这里粗略的写一写
//3.获取账号文件内容转化为数组
账号文件内容数组 = file.ReadLines(账号文件路径)
//4.读取脚本本身的配置 看看是否记录了上次的行数和对应的行内容 判断里面的内容是否正常 不正常就从第一行开始 正常就按照脚本配置的内容进行
起始行数=0
脚本记录的行数 = ReadConfig("脚本记录的行数")
脚本记录的行内容 = ReadConfig("脚本记录的行内容")
If Trim(脚本记录的行数) = "" or Trim(脚本记录的行内容) = "" Then
//如果脚本记录的上次的行数和行内容为空 那么这个记录就不合法 就从第一行开始了
起始行数 = 0
showmessage "起始记录是第["&cstr(起始行数+1)&"]条"
Delay 500
ElseIf not IsNumeric(Trim(脚本记录的行数)) or CInt(Trim(脚本记录的行数)) < 0 Then
//脚本记录de阿上次的行数是不是数值 不是则不合法
起始行数 = 0
showmessage "起始记录是第["&cstr(起始行数+1)&"]条"
Delay 500
ElseIf InStr(1, Trim(账号文件内容数组(CInt(脚本记录的行数))), 脚本记录的行内容) < 1 Then
//脚本记录的行数和行内容 在现在读取的账号文件的对应行上的内容 是否和脚本记录的行内容一致 不一致证明这个账号文件有变动 就从第一行开始
起始行数 = 0
showmessage "文件内容变动 起始记录是第{"&(起始行数+1)&"}条 "
Delay 500
Else
起始行数 = CInt(Trim(脚本记录的行数))
showmessage "起始记录是第["& cstr(脚本记录的行数+1) &"]条"
Delay 1000
End If
Delay 1000
//5.开始读取账号 读取前 把当前行数和行内容写入到脚本配置做记录
For i = 起始行数 To UBOUND(账号文件内容数组) //注意i不是从0开始的 就是说不一定是从第一行开始的
Rem 主循环开头
错误代码=0 //当执行一个新的账号流程 先默认是没任何报错的状态
////把当前行数和行内容写入到脚本配置里面 作为记录
当前行数 = i
本行内容 = trim(账号文件内容数组(i))
WriteConfig "脚本记录的行数", CStr(当前行数), true
WriteConfig "脚本记录的行内容", 本行内容, true //第三个参数必须为true
////分析出账号和密码 准备给脚本操作提供准备
arr = Split(本行内容, "----")
当前账号 = Trim(arr(0))
当前密码 = Trim(arr(1))
If 当前账号 = "" or 当前密码 = "" Then //简单判断下账号密码合法性 不合法就直接跳到下个账号进行操作
goto 主循环结尾
End If
////一些必要的脚本操作
Call 登录()
Call 签到()
Call 日常()
Call 退出()
////当前账号的运行结果和对应的处理方式 这里把错误代码更加细化 分为了几个大的范围 每个范围对应的各类错误
If 错误代码 = 0 Then
//运行正常没有发生任何意外
ElseIf 错误代码 > 0 and 错误代码 <= 100 Then
////普通错误[不需要重开app或者停止脚本 可以执行当前登录操作]
If 错误代码 = 1 Then
//随便举个例子 账号密码格式不对 请检查
ElseIf 错误代码 = 2 Then
//随便举个例子 账号密码登录提示密码错误 请检查
ElseIf 错误代码 = 3 Then
//随便举个例子 账号密码登录提示封号 请检查
End If
ElseIf 错误代码 > 100 and 错误代码 <= 200 Then
////流程错误 [不需要重开app或者停止脚本 不执行当前和后续模块操作]
ElseIf 错误代码 > 200 and 错误代码 <= 300 Then
//重开后下个账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
KillApp 当前包名
Delay 2000
RunApp 当前包名
//然后正常执行到了主循环开头的标识那边 当前账号流程又从头开始了 当然 也可以更进一步
//设置一个当前账号重复执行次数 判断当前账号重复次数到达多少次了依然无法完成就让他重开执行下一个账号的操作 避免无限卡一个账号无法继续执行的情况
Goto 主循环结尾
ElseIf 错误代码 > 300 and 错误代码 <= 400 Then
//重开后重复当前账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
KillApp 当前包名
Delay 2000
RunApp 当前包名
Goto 主循环开头
ElseIf 错误代码 > 400 and 错误代码 <= 500 Then
//遇到的是致命错误 脚本需要立刻停下 然后通知
KillApp 当前包名
//回到桌面
For 2
KeyPress "home"
Delay 1000
Next
//通知告诉脚本即将停止 或者播放音乐 或者屏幕中间进入倒计时 或者出现弹窗警告 或者其他等等方法
//然后停止脚本
EndScript
End If
Rem 主循环结尾
Delay 10
Next
//6 整个读取账号循环完毕不要忘记重置下脚本配置让脚本下次从第一行开始
ShowMessage "账号到底 重置记忆"
WriteConfig "脚本记录的行数", "", true
WriteConfig "脚本记录的行内容", "", true //第三个参数必须为true
Delay 2000
Function 登录()
Dim t,tt,ttt,是否完成操作
//判断之前的错误代码的值 来决定是否要执行当前模块操作
If 错误代码 = 0 Then
ElseIf 错误代码 > 0 and 错误代码 <= 100 Then
//普通错误[不需要重开app或者停止脚本 可以执行当前登录操作]
ElseIf 错误代码 > 100 and 错误代码 <= 200 Then
//流程错误 [不需要重开app或者停止脚本 不执行当前和后续模块操作]
Goto 登录结尾//直接跳转到模块末尾 不执行本模块的操作代码
ElseIf 错误代码 > 200 and 错误代码 <= 300 Then
//重开后下个账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
ElseIf 错误代码 > 300 and 错误代码 <= 400 Then
//重开后重复当前账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
ElseIf 错误代码 > 400 and 错误代码 <= 500 Then
//致命错误 [停止脚本 不执行当前模块操作 但是停止不是在这停止]
Goto 登录结尾
Else
End If
Rem 登录开头
是否完成操作 = -1
//登录主代码
t = TickCount()
Do
If TickCount() - t > 5 * 60 * 1000 Then //设定一个操作时间上限 超出该时间还没完成操作 判定操作超时
错误代码=201//登录超时登录失败 自然无法执行后续 重开app然后下一个账号操作
Goto 登录结尾
End If
If 遇到某个封号界面判定封号 then
错误代码=202 //账号被封 无法执行后续 重开app然后下一个账号操作
Goto 登录结尾
End If
If 出现密码错误提示 Then
错误代码=203 //账号密码错误 无法执行后续 重开app然后下一个账号操作
Goto 登录结尾
End If
If 出现账号会员即将到期的界面 Then
错误代码=1 //只是个提示而已 并不会影响什么 可以正常执行后续流程
Tap 100,200//点掉该界面即可 不需要跳出登录模块操作
End If
//这里是正常的登录界面的应对 不细说了
If 登录界面 Then
//输入当前z账号 当前密码操作
//点击登录按钮 等待几秒
//判断登录结果
End If
If 登录成功界面 Then
错误代码 = 0
Exit Do //正常出口
End If
If 登录失败界面 Then
错误代码=204 //登录失败错误 无法执行后续 重开app然后下一个账号操作
Goto 登录结尾
End If
Delay 500
Loop
Rem 登录结尾
End Function
Function 签到()
Dim t,tt,ttt,是否完成操作
//判断之前的错误代码的值 来决定是否要执行当前模块操作
If 错误代码 = 0 Then
ElseIf 错误代码 > 0 and 错误代码 <= 100 Then
//普通错误[不需要重开app或者停止脚本 可以执行当前登录操作]
ElseIf 错误代码 > 100 and 错误代码 <= 200 Then
//流程错误 [不需要重开app或者停止脚本 不执行当前和后续模块操作]
Goto 签到结尾//直接跳转到模块末尾 不执行本模块的操作代码
ElseIf 错误代码 > 200 and 错误代码 <= 300 Then
//重开后下个账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
ElseIf 错误代码 > 300 and 错误代码 <= 400 Then
//重开后重复当前账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
ElseIf 错误代码 > 400 and 错误代码 <= 500 Then
//致命错误 [停止脚本 不执行当前模块操作 但是停止不是在这停止]
Goto 签到结尾
Else
End If
Rem 签到开头
是否完成操作 = -1
//登录主代码
t = TickCount()
Do
If TickCount() - t > 5 * 60 * 1000 Then //设定一个操作时间上限 超出该时间还没完成操作 判定操作超时
错误代码=201//登录超时登录失败 自然无法执行后续 重开app然后下一个账号操作
Goto 签到结尾
End If
If 遇到已签到界面 Then
Tap 100,200//点掉该界面即可 不需要跳出模块操作
End If
//这里是正常的登录界面的应对 不细说了
If 签到界面 Then
//执行签到操作 点击签到按钮
//判断签到结果
End If
If 签到成功界面 Then
错误代码 = 0
Exit Do //正常出口
End If
If 签到失败界面 Then
错误代码=205 //签到失败错误 无法执行后续 重开app然后下一个账号操作
Goto 签到结尾
End If
//其他签到界面应对不说了
Delay 500
Loop
Rem 签到结尾
End Function
Function 日常()
Dim t,tt,ttt,是否完成操作
//判断之前的错误代码的值 来决定是否要执行当前模块操作
If 错误代码 = 0 Then
ElseIf 错误代码 > 0 and 错误代码 <= 100 Then
//普通错误[不需要重开app或者停止脚本 可以执行当前登录操作]
ElseIf 错误代码 > 100 and 错误代码 <= 200 Then
//流程错误 [不需要重开app或者停止脚本 不执行当前和后续模块操作]
Goto 日常结尾//直接跳转到模块末尾 不执行本模块的操作代码
ElseIf 错误代码 > 200 and 错误代码 <= 300 Then
//重开后下个账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
Goto 日常结尾
ElseIf 错误代码 > 300 and 错误代码 <= 400 Then
//重开后重复当前账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
Goto 日常结尾
ElseIf 错误代码 > 400 and 错误代码 <= 500 Then
//致命错误 [停止脚本 不执行当前模块操作 但是停止不是在这停止]
Goto 日常结尾
Else
End If
Rem 日常开头
是否完成操作 = -1
//登录主代码
t = TickCount()
Do
If TickCount() - t > 5 * 60 * 1000 Then //设定一个操作时间上限 超出该时间还没完成操作 判定操作超时
错误代码=202//日常超时日常失败 自然无法执行后续 重开app然后下一个账号操作
Goto 日常结尾
End If
If 遇到已日常界面 Then
Tap 100,200//点掉该界面即可 不需要跳出模块操作
End If
//这里是正常的登录界面的应对 不细说了
If 日常界面 Then
//执行日常操作 点击签到按钮
//判断日常结果
End If
If 日常成功界面 Then
错误代码 = 0
Exit Do //正常出口
End If
If 日常失败界面 Then
错误代码=206 //日常失败错误 无法执行后续 重开app然后下一个账号操作
Goto 日常结尾
End If
//其他日常界面应对不说了
Delay 500
Loop
Rem 日常结尾
End Function
Function 退出()
Dim t,tt,ttt,是否完成操作
//判断之前的错误代码的值 来决定是否要执行当前模块操作
If 错误代码 = 0 Then
ElseIf 错误代码 > 0 and 错误代码 <= 100 Then
//普通错误[不需要重开app或者停止脚本 可以执行当前登录操作]
ElseIf 错误代码 > 100 and 错误代码 <= 200 Then
//流程错误 [不需要重开app或者停止脚本 不执行当前和后续模块操作]
Goto 退出结尾//直接跳转到模块末尾 不执行本模块的操作代码
ElseIf 错误代码 > 200 and 错误代码 <= 300 Then
//重开后下个账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
Goto 退出结尾
ElseIf 错误代码 > 300 and 错误代码 <= 400 Then
//重开后重复当前账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
Goto 退出结尾
ElseIf 错误代码 > 400 and 错误代码 <= 500 Then
//致命错误 [停止脚本 不执行当前模块操作 但是停止不是在这停止]
Goto 退出结尾
Else
End If
Rem 日常开头
是否完成操作 = -1
//登录主代码
t = TickCount()
Do
If TickCount() - t > 5 * 60 * 1000 Then //设定一个操作时间上限 超出该时间还没完成操作 判定操作超时
错误代码=203//退出超时退出失败 自然无法执行后续 重开app然后下一个账号操作
Goto 退出结尾
End If
//这里是正常的退出界面的应对 不细说了
If 退出界面 Then
//执行退出操作
//判断退出结果
End If
If 退出成功界面 Then
错误代码 = 0
Exit Do //正常出口
End If
If 退出失败界面 Then
错误代码=207 //退出失败错误 无法执行后续 重开app然后下一个账号操作
Goto 退出结尾
End If
//其他日常界面应对不说了
Delay 500
Loop
Rem 退出结尾
End Function
改动:
对错误代码进行了细化和分类 如果项目很大 那么错误代码细化和分类还是很有好处的 项目不大完全无需如此麻烦
1.无错误 错误代码=0 一切都在预计内 不需要任何额外操作
2.普通错误 错误代码1-100 不需要额外操作也不会影响后续模块的正常运行 只是最后日志多个提示而已
3.流程错误 错误代码 101-200 不需要额外操作 但是因为当前模块的操作无法完成 导致后续模块操作无法继续
4 重开app下一账号错误 错误代码201-300 需要重开app 然后进入下一个账号的流程 当前账号的后续操作无法继续
5 重开app重复当前账号错误 错误代码301-400 需要重开app 然后重复当前账号的流程 本次当前账号的后续操作无法继续
6 致命错误 错误代码401-500 要求停止脚本操作 自然当前账号的后续操作无法继续
在例子里面 在 登录 签到 日常 退出4个模块里面 我们遇到特殊的界面 只是对全局变量[错误代码]赋一个错误值 本身并没有太多针对性的操作 具体的针对某个错误代码值的针对操作是在 经过登录 签到 日常退出4个模块后的那个错误代码的if elseif end if 结构 那里才是错误处理的部分 或者可以理解为 在 登录 签到 日常 退出4个模块里面 我门只是抛出异常 在4个模块之后的if结构里面才是处理异常
几种情况的模拟流程
1.遇到 账号密码错误界面 按照脚本流程走--》先获取对应的账号和密码 --》此时错误代码=0 没有任何异常错误->进入 登录()模块 –>因为错误代码=0 所以并没有跳过登录()模块的主代码--》进入登录模块主代码 开始运行登录流程—>遇到了登录界面输入账号和密码点击登录出现密码错误界面---》进行了如下操作 错误代码=203 //账号密码错误 无法执行后续 重开app然后下一个账号操作 Goto 登录结尾--》错误代码=203 并且跳出了登录模块—>进入到签到模块--》因为此时错误代码=203 根据签到模块的处理 是应该—》
ElseIf 错误代码 > 200 and 错误代码 <= 300 Then //重开后下个账号错误[需要重开app 不执行当前模块操作 但是不是再这里重开app的]
goto 签到结尾
--》跳过了签到模块--》日常模块 也是因为 错误代码=203 一样跳过
---》退出模块 也是因为 错误代码=203 一样跳过
--》到了最后的异常错误处理的if elseif end if结构 根据错误代码=203来执行重开app 进行下一个账号的操作
来源:oschina
链接:https://my.oschina.net/u/4394215/blog/3534953