TonyJiangWJ/Unify-Sign

自己写了什么值得买app签到模块运行不起来,求大佬有空帮忙看下

Opened this issue · 18 comments

大佬求带
我基于淘金币签到代码Taobao-Coin.js改了一个什么值得买app的签到代码,由于我比较小白,代码有点问题,大佬有空的话帮忙解惑。
smzdm.txt
ps其实如果不把文件里的BaseSignRunner换成smzdm,不把SignRunner换成smzdmRunner的话,是能正常运行的,就是执行完会误判执行失败,我也搞不清为什么。

也在config.js里相应位置加入了此签到的开关,但点击位置有点错乱,也搞不明白为啥。ps放在最后一个位置好像没问题,但我为了测试放到了中间。需要随之修改哪里才能让点击位置对应?
name: '全家签到', script: 'Fami.js', enabled: true }, { name: '值得买签到', script: 'smzdm.js', enabled: true }, { name: '京东签到', script: 'JingDongBeans.js', enabled: true

你要参考的话不要看淘金币的 这个是特殊处理的,直接参考Fami.js这个是最简单的逻辑,BaseSignRunner是基类 你写的里面需要继承它 所以不能乱改。
第二个问题不清楚直接增加应该不会有问题

哦哦这样啊,那我就不改BaseSignRunner了。那么目前执行完会判断执行失败,导致一直循环,这个是什么原因呢?
这个解决了应该就可用了。

签到完成后执行 this.setExecuted() 具体你看一下Fami.js的逻辑 自己理解思路才是最重要的

好的,我再去尝试一下

问个问题,一个页面有两个“去签到”,如何用类似WidgetUtils.widgetGetOne('去签到')的函数获取到第二个呢?

WidgetUtils.widgetGetAll

上个问题解决啦大佬,又遇到了新问题,
启动京东app时,他大多数时候不会弹出系统的是否允许打开京东app,但偶尔也会出现,所以我就想把淘宝签到里的打开app判断是否有弹窗询问的代码放到京东这里,即以下代码:

` FloatyInstance.setFloatyText('校验是否有打开确认弹框')

let confirm = widgetUtils.widgetGetOne(/^打开|允许$/, 3000)

if (confirm) {

  this.displayButtonAndClick(confirm, '找到了打开按钮')

} else {

  FloatyInstance.setFloatyText('没有打开确认弹框')

}`

加到了京东签到文件里:

` // 进入京东app

const startApp = function () {

logInfo('启动京东应用')

launch(_package_name)

sleep(1000)

FloatyInstance.setFloatyText('校验是否有打开确认弹框')

let confirm = widgetUtils.widgetGetOne(/^打开|允许$/, 3000)

if (confirm) {

  this.displayButtonAndClick(confirm, '找到了打开按钮')

} else {

  FloatyInstance.setFloatyText('没有打开确认弹框')

}

sleep(5000)

}`

但是加了以后总会报错,还尝试过把widgetUtils.widgetGetOne(/^打开|允许$/, 3000)改成widgetUtils.widgetGetOne('允许', 3000),也不行,有点摸不着头脑,大佬知道这是为啥吗?
ps:报错是在京东app被打开(没有询问)之后,“校验是否有打开确认弹框”这句话出现之前

报错具体的日志是啥?

2021-09-13 20:10:05.755 ERROR [E:27 T:1787] - "widgetUtils" is not defined.
我去看了一眼明白了,淘宝哪里用的是widgetUtils京东这边是WidgetUtils,所以报错了。
不好意思大佬又打扰了,我还不是很会看日志debug,不过这次又学到了,我继续了

大佬我又来了。。。我的代码:

let x123 = WidgetUtils.widgetGetAll('x1|x2|x3')

this.displayButtonAndClick(x123, '领取营养液')


实现京东种豆得豆里收取营养液的功能,报错如下:

2021-09-13 21:07:19.153 DEBUG [E:43 T:2652] - try to find all: x1|x2|x3 timeout: 8000ms

2021-09-13 21:07:19.383 DEBUG [E:43 T:2724] - find text x1|x2|x3 x1

2021-09-13 21:07:19.407 DEBUG [E:43 T:2] - 京东签到 执行异常,请检查代码

2021-09-13 21:07:20.410 ERROR [E:43 T:2652] - fileName:file:/storage/emulated/0/脚本/Unify-Sign-master/core/BaseSignRunner.js line:56 typeof e:object

2021-09-13 21:07:20.420 ERROR [E:43 T:2652] - Cannot find function bounds in object com.stardust.automator.UiObjectCollection@809e107.

我去BaseSignRunner.js看了displayButtonAndClick第一个参数不能是数组,那我现在加上一个函数:
`
this.displayButtonsAndClickAll = function (button[], desc, delay) {

if (button) {

  for(i = 0; i < button.length; i++){

    FloatyInstance.setFloatyInfo(

      {

        x: button[i].bounds().centerX(),

        y: button[i].bounds().centerY()

      },

      desc)

    sleep(delay || 1000)

    automator.clickCenter(button[i])

  }

}

}

`
不知道语法对不对,,,我只会java不会js,所以语法细节感觉会错很多。。。
或者有没有不改动你的BaseSignRunner的情况下实现我想实现的点击全部的x1|x2|x3?

getAll返回的应该是一个集合 com.stardust.automator.UiObjectCollection 对应java中的collection,你直接用length应该是不行的
你按如下修改试一下

this.displayButtonsAndClickAll = function (buttons, desc,delay) {
  // ...
  for (i=0;i<buttons.size();i++) {
    let button = buttons.get(i)
    //  后续操作
  }
  // ...
}

大佬可以了!!!
基于你的代码,我把我平时每天早上在京东app里的签到实现了,代码传上来了大佬有时间可以检阅一下haha
还有一点待实现,就是种豆得豆每周一十点之后的收取,只能等到下周一我在看到那个页面是啥再把相应的判断+点击代码加上去了。
万分感谢大佬,过程中学到了很多很多!!!

JingDongBeans.txt
config.txt
BaseSignRunner.txt

手机是小米10pro,分辨率是1080*2340,顶部偏置是-90
其中部分地方我用的是直接点击坐标,代码的签到逻辑优化空间还比较大,我比较菜所以目前就以能跑为第一目标,后面有时间我会在改一改。
同时我还在编淘宝的签到,包括红包签到,芭芭阳光农场,目前芭芭阳光农场跑起来还是容易进死胡同我还在调。
后续有时间还想慢慢实现闲鱼的签到闲鱼币(不到8小时就满,一天可能得4次),还有zfb的每晚凌晨前步数捐赠。

大佬是否能给签到代码加一个设置参数运行的模板呢?比如我每天设定4点10点16点22点运行闲鱼app签到,而其他的签到不跑。

比如我每天设定4点10点16点22点运行闲鱼app签到,而其他的签到不跑。

这个目前没有特别好的想法,目前除了淘金币的和蚂蚁积分 其他的都是设置的每天只会跑一次,所以你可以对闲鱼的签到设置为5.9小时的有效期 完全设置6小时可能因为时间窗太小无法正常执行所以还是设置稍微小一点比较好,然后在4,10,16,22的整点设置定时启动。同时需要去除那个随机延迟的代码

// 设设置5.9小时内不再执行
this.setExecuted(5.9 * 3600000)

最近很少更新这部分的代码了 等后续心血来潮再看看有没有更好的方式

噢噢我以为能和蚂蚁森林一样,我现在每天跑的蚂蚁森林就是你的先设置参数再运行的代码
早上7点开始是无限收取,然后7点半开始(全天)是最大60分钟的判断倒计时收取

那我先搞其他的

基本完成了京东和淘宝里自己想实现的功能,京东包括全部常规京豆相关任务,淘宝在原有基础上添加了红包签到和芭芭阳光农场,并且相对上次的代码,已经对流程进行了一定的优化;
蚂蚁签到文件改了一下家庭积分领取的流程,因为支付宝页面更新了,然后添加了蚂蚁森林里发现动物并捐赠10g能量的功能。
自己调了一两周了基本还可以,但不排除在别的机型上可能会有bug或者交互错乱。
有个我解决不了的问题,就是现在所有的签到标记“已完成”的功能失效了,其中几个我没动过对已完成标记的相关代码,如蚂蚁积分、京东里应该也没动过,但不管动没动过,所有的代码完成标记功能都失效了。这就会导致一天内第二次运行的时候还是会将所有的签到都重复一遍。大佬能不能给我讲一下标记完成功能是怎么实现的,弄明白之后我就慢慢修复一下相关功能。

Taobao-Coin.txt
JingDongBeans.txt
AntCredits.txt

main.js 里面会调用 core/MainExecutor.js 然后 MainExecutor里面会读取当前已启用的任务信息,逐个遍历,setName并调用executeIfNeeded

  //....
  try {
    if (!require('./' + target.script).setName(target.name).executeIfNeeded()) {
      restart = true
    }
  } 
  //....

executeIfNeeded方法定义在BaseSignRunner 会通过setName的name判断当日是否已经执行过

  /**
   * 判断今天是否已经执行过,没有的话执行签到任务
   */
  this.executeIfNeeded = function () {
    if (commonFunctions.checkIsSignExecutedToday(this.name)) {
      FloatyInstance.setFloatyText(this.name + '今日已经执行过,跳过执行')
      sleep(1000)
      return true
    } else {
      // 自动延期
      runningQueueDispatcher.renewalRunningTask()
      this.exec()
      return this.executedSuccess
    }
  }

  /**
   * 标记今天已经执行过
   * @param {number} timeout 可选参数,设置一个超时时间,超时时间后可以再次执行
   */
  this.setExecuted = function (timeout) {
    commonFunctions.setExecutedToday(this.name, timeout)
    this.executedSuccess = true
  }

你这部分的功能失效了 需要看一下具体执行流程中的代码是否被修改过

感谢大佬讲解,我研究学习一下