lisaisacat 发表于 2020-9-28 14:28

【Lua】金币庄园赚金币能量脚本(积木编程 LuaBox免 ROOT 全分辨率)

本帖最后由 lisaisacat 于 2020-12-9 10:13 编辑

使用前须知:
截止到代码更新的时候还可以用,但由于淘宝这个界面本身就有部分网页元素无法获取到控件信息,不排除以后更新所有元素都无法获取的情况。
另外目前的逻辑过于严格,淘宝这个页面经常卡顿,偶尔发生任务没做完就返回任务列表了。
如果有编程能力的朋友,可以自行优化代码中的延迟时间和逻辑;没有编程能力的,就用可视化模式自己找文字试试。

2020-10-27 更新:
简化了代码,只做两种任务,就是 10s 的
之前用了相对坐标,今天无意中发现,其实浏览这几个字本身那个区域就可以进入任务界面。
但我还是觉得可视化更好用一些。

逻辑如下:(可视化模式下新建脚本照着添加命令,配置中设置循环执行就可以了)

while true do
    device.keepWake()
    local 浏览 = widget.find({["text"]="浏览10s 立得"})--控件不支持点击,先要获取坐标
    if 浏览 ~= nil then
    x1,y1,x2,y2 = widget.region(浏览)
    if x1 ~= -1 then
      x = (x1 + x2)/2--计算控件中心点,其实也可以不计算,我只是为了准确
      y = (y1 + y2)/2
      event.tap(x,y)
      toast("开始浏览10s 立得任务")
      mSleep(35000)--考虑到网络加载可能比较慢,此处等待 35 秒,如果你的网速很快可以改成 15
      toast("浏览10s 立得任务完成")
      keycode.back()
      mSleep(3000)
    end
else
    local 十秒 = widget.find({["text"]="浏览10秒立得"})
    if 十秒 ~= nil then
    x1,y1,x2,y2 = widget.region(十秒)
    if x1 ~= -1 then
      x = (x1 + x2)/2
      y = (y1 + y2)/2
      event.tap(x,y)
      toast("开始浏览10秒立得任务")
      mSleep(35000)
      toast("浏览10秒立得任务完成")
      keycode.back()
      mSleep(3000)
    else
      local 领取奖励 = widget.find({["text"]="领取奖励"})
      if 领取奖励 ~= nil then
      toast("领取奖励")
      widget.click(领取奖励)
      mSleep(3000)
    else
      local 赚金币 = widget.find({["text"]="赚金币"})--打开任务列表
      if 赚金币 ~= nil then
      widget.click(赚金币)
      toast("赚金币")
      mSleep(3000)
    end
end
end
end
end
end



以下为旧版:
https://static.52pojie.cn/static/image/hrline/1.gif

脚本逻辑:因为【去完成】有的任务不想做,比如充话费,所以我找的左侧的【浏览】文字,再根据这个坐标计算的【去完成】按钮坐标。
问题就是这个脚本目前仅适用于 2K 分辨率的手机。
其他分辨率需要自己改一下那个相对坐标。


https://static.52pojie.cn/static/image/hrline/1.gif


2020-10-22 测试还是可以获取到控件信息的。


更新日志:
简化了代码逻辑
去掉了点击我的和淘金币功能,现在需要手动打开金币庄园才行,因为前面太卡了经常失败。

新版本代码:
for i = 1,30 do
      device.keepWake()
      local 领取奖励 = widget.find({["text"]="领取奖励"})
      if 领取奖励 ~= nil then
                toast("领取奖励")
                widget.click(领取奖励)
                mSleep(3000)
      else
                local 浏览 = widget.find({["text"]="浏览",["rule"]=2})
                if 浏览 ~= nil then
                        x1,y1,x2,y2 = widget.region(浏览)
                        if x1 ~= -1 then--根据浏览字样的左上角坐标计算按钮坐标,不同手机不一样,目前支持的是华为 P30 pro, 其他分辨率需要手动修改
                              x = x1 + 616
                              y = y1 - 18
                              event.tap(x,y)
                              toast("开始浏览任务")
                              mSleep(35000)--考虑到网络加载可能比较慢,此处等待 35 秒,如果你的网速很快可以改成 15
                              toast("浏览任务完成")
                              keycode.back()
                              mSleep(3000)
                        end
                else
                        local 十秒 = widget.find({["text"]="10s",["rule"]=1})
                        if 十秒 ~= nil then
                              x1,y1,x2,y2 = widget.region(十秒)
                              if x1 ~= -1 then--不同手机不一样,目前支持的是华为 P30 pro, 其他分辨率需要手动修
                                        x = x1 + 606
                                        y = y1 - 18
                                        event.tap(x,y)
                                        toast("10s 任务")
                                        mSleep(35000)
                                        toast("10s 任务完成")
                                        keycode.back()
                                        mSleep(3000)
                              end
                        else
                              local 秒 = widget.find({["text"]="10秒",["rule"]=1})
                              if 秒 ~= nil then
                                        x1,y1,x2,y2 = widget.region(秒)
                                        if x1 ~= -1 then--不同手机不一样,目前支持的是华为 P30 pro, 其他分辨率需要手动修
                                                x = x1 + 606
                                                y = y1 - 18
                                                event.tap(x,y)
                                                toast("10秒任务")
                                                mSleep(35000)
                                                toast("10秒任务完成")
                                                keycode.back()
                                                mSleep(3000)
                                        else
                                                local earn = widget.find({["text"]="赚金币"})
                                                if earn ~= nil then
                                                      widget.click(earn)
                                                      toast("赚金币")
                                                      mSleep(3000)
                                                end
                                        end
                              end
                        end
                end
      end
end

https://static.52pojie.cn/static/image/hrline/1.gif

2020-10-13 更新:
修复没有自动打开手机淘宝的问题
修复部分没有“浏览”俩字的 10s 任务不自动做的问题
修复由于脚本逻辑导致偶尔返回失败的问题
新增任务结束自动退出脚本功能(如果分辨率较小可能不生效)
小米手机打开闪退请在系统权限中给积木编程悬浮窗权限



https://static.52pojie.cn/static/image/hrline/1.gif

运行环境:LuaBox/积木编程(软件自行百度下载,关键词:触动精灵官网)
运行系统:安卓 5 以上,无需 ROOT
开发环境:触动精灵编辑器 3.0


脚本功能:领取浏览任务>>领金币
脚本语言:Lua
脚本原理:通过安卓无障碍权限获取界面控件节点属性信息查找界面元素进行点击
因为网速或者设备性能原因,只需要 15 秒的任务,我等待的时间比较长
但是仍然不排除会出现卡住的情况,只能算是个半自动脚本吧
开发软件过程中测试用的,在华为 P30 Pro 上运行还可以

使用方法:打开积木编程(设置中选择源码模式) - 新建脚本 - 复制粘贴源码 - 运行

脚本源码:
pkgname = app.getPackageName("手机淘宝")
app.runApp(pkgname)
mSleep(3000)
while true do
    device.keepWake()
    local done =widget.find({["text"]="已完成",["type"]="Button",["path"]="/FrameLayout/LinearLayout/FrameLayout/ViewGroup/FrameLayout/WebView/bb/WebView/View/View/View/View/ListView/ListView/View/Button"})
    if done ~= nil then
      toast("任务全部完成,脚本即将于 3 秒后退出")
      mSleep(3000)
      runtime.exit()
    else
      local get = widget.find({["text"]="领取奖励"})
      if get ~= nil then
            toast("领取奖励")
            widget.click(get)
            mSleep(3000)
      else
            local skim = widget.find({["text"]="浏览",["rule"]=2,["path"]="/FrameLayout/LinearLayout/FrameLayout/ViewGroup/FrameLayout/WebView/bb/WebView/View/View/View/View/ListView/ListView/View/View/View"})
            if skim ~= nil then
                x1,y1,x2,y2 = widget.region(skim)
                if x1 ~= -1 then
                  x = x1 + 700
                  y = y1 - 18
                  toast("浏览任务")
                  event.tap(x,y)
                  local t0 = os.time()
                  mSleep(35000)
                  local t1 = os.time()
                  if t1 - t0 >= 30 then--考虑到网络加载可能比较慢,此处等待 30 秒,如果你的网速很快可以改成 15
                        toast("浏览任务完成,返回")
                        keycode.back()
                        mSleep(3000)
                  end
                end
            else
                local second = widget.find({["text"]="10s",["rule"]=1,["path"]="/FrameLayout/LinearLayout/FrameLayout/ViewGroup/FrameLayout/WebView/bb/WebView/View/View/View/View/ListView/ListView/View/View/View"})
                if second ~= nil then
                  x1,y1,x2,y2 = widget.region(second)
                  if x1 ~= -1 then
                        x = x1 + 700
                        y = y1 - 18
                        toast("10s 任务")
                        event.tap(x,y)
                        local t0 = os.time()
                        mSleep(35000)
                        local t1 = os.time()
                        if t1 - t0 >= 30 then--考虑到网络加载可能比较慢,此处等待 30 秒,如果你的网速很快可以改成 15
                            toast("10s 任务完成,返回")
                            keycode.back()
                            mSleep(3000)
                        end
                  end
                else
                  local mytb =widget.find({["desc"]="我的淘宝"})
                  ifmytb ~= nil then
                        toast("我的淘宝")
                        widget.click(mytb)
                        mSleep(3000)
                  end
                end
                local enter =widget.find({["text"]="淘金币",["path"]="/FrameLayout/LinearLayout/FrameLayout/LinearLayout/FrameLayout/FrameLayout/FrameLayout/RelativeLayout/LinearLayout/RecyclerView/FrameLayout/FrameLayout/RecyclerView/FrameLayout/TextView"})
                ifenter ~= nil then
                  x1,y1,x2,y2 = widget.region(enter)
                  if x1 ~= -1 then
                        x = (x1+x2)/2
                        y = (y1+y2)/2
                        toast("淘金币")
                        event.tap(x,y)
                        mSleep(10000)
                  end
                end
            end
            local earn = widget.find({["text"]="赚金币",["path"]="/FrameLayout/LinearLayout/FrameLayout/ViewGroup/FrameLayout/WebView/bb/WebView/View/View/View/View/View/ListView/View/Button"})
            if earn ~= nil then
                toast("赚金币")
                widget.click(earn)
                mSleep(3000)
            end
      end
    end
end

lisaisacat 发表于 2020-9-30 10:59

godmodel 发表于 2020-9-29 19:31
楼主给了软件连接

论坛规定不让发链接,而且这个软件因为里面有反馈邮箱联系方式也不能发,只能自己百度了

lisaisacat 发表于 2020-9-28 21:46

yzqhj 发表于 2020-9-28 21:33
楼主,用什么软件,积木编程,没找到软件,,,,,

百度触动精灵官网试试?新开发的软件还没上架应用商店呢。

z1991627 发表于 2020-9-28 17:05

今天晚上回去测试一下试下

wang7894jin 发表于 2020-9-28 17:14

责这个怎么用呢

csirad 发表于 2020-9-28 17:50

怎么用啊,不明白

lisaisacat 发表于 2020-9-28 17:56

csirad 发表于 2020-9-28 17:50
怎么用啊,不明白

复制源码,打开软件,新建脚本,粘贴,运行
{:1_907:}

lisaisacat 发表于 2020-9-28 17:57

本帖最后由 lisaisacat 于 2020-9-28 18:00 编辑

wang7894jin 发表于 2020-9-28 17:14
责这个怎么用呢
脚本源码当然就是复制粘贴到软件里直接运行,还能怎么用啊{:1_907:}

yzqhj 发表于 2020-9-28 21:33

楼主,用什么软件,积木编程,没找到软件,,,,,{:1_907:}

1225661221 发表于 2020-9-28 21:41

找不到软件

lisaisacat 发表于 2020-9-28 21:48

1225661221 发表于 2020-9-28 21:41
找不到软件

百度搜索触动精灵官网 - 产品中心里面就有啦
页: [1] 2 3 4 5 6 7
查看完整版本: 【Lua】金币庄园赚金币能量脚本(积木编程 LuaBox免 ROOT 全分辨率)