georgehuan1994 / DingDing-Automatic-Clock-in

钉钉全自动打卡脚本,基于auto.js,免root,适用于蓝牙考勤机
808 stars 210 forks source link

无法填充QQ消息 #39

Closed DosLee closed 2 years ago

DosLee commented 2 years ago

版本

安卓版本:7.1 QQ版本:8.8.55

现象

自动跳转到指定QQ联系人对话框就没有了,没有在输入框输入内容并点击发送

代码

function sendQQMsg(message) {

    console.log("发送QQ消息")

    // brightScreen()      // 唤醒屏幕
    // unlockScreen()      // 解锁屏幕

    app.startActivity({
        action: "android.intent.action.VIEW",
        data: "mqq://im/chat?chat_type=wpa&version=1&src_type=web&uin=" + QQ,
        packageName: "com.tencent.mobileqq",
    });

    waitForActivity("com.tencent.mobileqq.activity.SplashActivity")
    // input("输入") // 不生效
    console.log(setText("输入")); // 返回false,找不到输入框
    id("input").findOne().setText(message);
    id("fun_btn").findOne().click();
    // home()
    // sleep(1000)
    // lockScreen()    // 关闭屏幕
}
DosLee commented 2 years ago

麻烦问一下大神有解决办法吗?或是可调试办法吗?

georgehuan1994 commented 2 years ago

试试在 waitForActivity 之后,加个判断,看看能否找到这个控件

if(id("input").exists()){
    console.log("input exists!");
}

如果找不到,有两种可能: 1、控件 id 改变了,可以使用 autoJs 的悬浮窗,查看控件的属性,具体操作参考 issue #5 (当前我的QQ版本是 8.8.12,输入框的 id 仍然是 input) 2、当前活动被其他应用抢占了,比如说输入法。当前活动不再是 QQ 了,所以找不到 input 这个控件。可以把通知过滤器设为 false,打印所有的通知,去日志里看看是什么应用被唤醒了,然后解决掉这个应用。要么使用更多的 UISelector,比如 fullId("com.tecent.mobileqq:id/input")

georgehuan1994 commented 2 years ago

如果控件存在,那么可能是参数 message 为空,可以检查一下这个方法的调用

georgehuan1994 commented 2 years ago

另外

// input("输入") // 不生效
    console.log(setText("输入")); // 返回false,找不到输入框

这两句的语法有问题,需要先指明对象,直接使用 setText() 方法是不行的

DosLee commented 2 years ago

试试在 waitForActivity 之后,加个判断,看看能否找到这个控件

if(id("input").exists()){
    console.log("input exists!");
}

如果找不到,有两种可能: 1、控件 id 改变了,可以使用 autoJs 的悬浮窗,查看控件的属性,具体操作参考 issue #5 (当前我的QQ版本是 8.8.12,输入框的 id 仍然是 input) 2、当前活动被其他应用抢占了,比如说输入法。当前活动不再是 QQ 了,所以找不到 input 这个控件。可以把通知过滤器设为 false,打印所有的通知,去日志里看看是什么应用被唤醒了,然后解决掉这个应用。要么使用更多的 UISelector,比如 fullId("com.tecent.mobileqq:id/input")

感谢回复,试了悬浮窗查看控件,可是点击后全屏只有一个大的绿色方框,第一感觉像是被QQ屏蔽了一样,QQ版本降到和你一样的,还是不行,id("input").exists() 总是返回false。同时用悬浮框试了微信也是一样的效果,无法选取。 不过试了一下钉钉,布局立马就出来了,也可以获取相应参数。

DosLee commented 2 years ago

另外

// input("输入") // 不生效
    console.log(setText("输入")); // 返回false,找不到输入框

这两句的语法有问题,需要先指明对象,直接使用 setText() 方法是不行的

好的,感谢指出。

georgehuan1994 commented 2 years ago

感谢回复,试了悬浮窗查看控件,可是点击后全屏只有一个大的绿色方框,第一感觉像是被QQ屏蔽了一样,QQ版本降到和你一样的,还是不行,id("input").exists() 总是返回false。同时用悬浮框试了微信也是一样的效果,无法选取。 不过试了一下钉钉,布局立马就出来了,也可以获取相应参数。

使用 autoJs 悬浮窗查看这个对象的属性(大的绿色方框),看看它到底是什么。

DosLee commented 2 years ago

感谢回复,试了悬浮窗查看控件,可是点击后全屏只有一个大的绿色方框,第一感觉像是被QQ屏蔽了一样,QQ版本降到和你一样的,还是不行,id("input").exists() 总是返回false。同时用悬浮框试了微信也是一样的效果,无法选取。 不过试了一下钉钉,布局立马就出来了,也可以获取相应参数。

使用 autoJs 悬浮窗查看这个对象的属性(大的绿色方框),看看它到底是什么。

下图是点击 autojs pro 软件的悬浮窗第三个图标(元素控件定位)后显示的样子。 点击绿色方框后没有任何反应,点击悬浮窗的设置按钮显示当前应用包:com.tencent.mobileqq 当前活动:com.tencent.mobileqq.activity.SplashActivity 。 您用的什么手机?

B812D20E0F2413AFCD5138AEF8AC6D69

下图是用悬浮窗第三个图标(元素控件定位)后钉钉软件显示的样子

24578B34AE5FDB44079632479CC20F6C

georgehuan1994 commented 2 years ago

autojs pro 屏蔽了一些主流应用,更换为我在仓库里提供的那个版本吧 https://github.com/georgehuan1994/DingDing-Automatic-Clock-in/blob/master/Autojs%204.1.1a%20Alpha2-armeabi-v7a-release.apk

DosLee commented 2 years ago

autojs pro 屏蔽了一些主流应用,更换为我在仓库里提供的那个版本吧 https://github.com/georgehuan1994/DingDing-Automatic-Clock-in/blob/master/Autojs%204.1.1a%20Alpha2-armeabi-v7a-release.apk

啊啊啊啊,还真的是,换成4.1版本的就可以看到了。 感谢,感谢,感谢。哈哈哈 那我就关闭此issue了