注册 登录
发贴工具
查看: 12|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWORK软件节点方法无碍示例子

[复制链接]

2449

主题

2497

帖子

1万

积分

积分
14898
跳转到指定楼层
楼主
AIWORK软件节点方法无碍示例子
AIWORK软件节点方法无碍示例子 群发软件发帖工具
AIWORK软件节点方法无碍示例子 群发软件发帖工具
  1. // Android APP自动化核心API修正版 - AIWROK IDE 开发 (ES5 兼容)
  2. // 节点方法无碍示例子
  3. // ES5系统安卓 JavaScript引擎Rhino     
  4. // // 🍎交流QQ群711841924群一,苹果内测群,528816639

  5. // AIWROK IDE 窗口设置
  6. printl(logWindow.setAlpha(208));      
  7. logWindow.setHeight(2800);
  8. logWindow.setWidth(2000);

  9. printl("=== Android APP自动化核心API修正版 ===");
  10. print.log("=== Android APP自动化核心API修正版 ===");

  11. // ==================== 1. 基础API测试 ====================

  12. printl("");
  13. print.log("=== 1. 基础API测试 ===");

  14. printl("1.1 设置详细模式并搜索...");
  15. auto.setDetailedModel();
  16. var node = auto.nodeSearch(1000);
  17. printl("详细模式搜索结果节点数:", node != '' ? node.count() : 0);
  18. print.log("auto.setDetailedModel() + auto.nodeSearch(1000): 完成");

  19. printl("");
  20. printl("1.2 获取当前可点击节点...");
  21. var clickNode = auto.getClickNode();
  22. printl("当前可点击节点:", clickNode.getDesc());
  23. print.log("auto.getClickNode(): 完成");

  24. if (clickNode != '') {
  25.     printl("可点击节点信息:");
  26.     printl("  文本:", clickNode.getDesc());
  27.     printl("  ID:", clickNode.getID());
  28.     printl("  类名:", clickNode.getClassName());
  29.     printl("  边界:", clickNode.getBounds());
  30. }

  31. // 正确方式:使用nodeSearch筛选可点击节点
  32. printl("");
  33. printl("1.3 搜索所有可点击节点...");
  34. var allClickable = auto.nodeSearch(1000).clickable(true);
  35. printl("所有可点击节点数量:", allClickable != '' ? allClickable.count() : 0);

  36. if (allClickable != '' && allClickable.count() > 0) {
  37.     printl("前3个可点击节点:");
  38.     var displayCount = Math.min(3, allClickable.count());
  39.     for (var i = 0; i < displayCount; i++) {
  40.         var clickElement = allClickable.getNode(i);
  41.         printl("  ", (i + 1), ".", clickElement.getDesc());
  42.     }
  43. }

  44. printl("");
  45. printl("1.4 测试getRooNode...");
  46. try {
  47.     var rootNode = auto.getRooNode();
  48.     if (rootNode != '' && rootNode != null) {
  49.         printl("getRooNode结果: 成功");
  50.         printl("根节点信息:", rootNode.getDesc());
  51.     } else {
  52.         printl("getRooNode结果: 返回空值");
  53.     }
  54. } catch (e) {
  55.     printl("getRooNode结果: API不存在");
  56.     printl("错误:", e.toString());
  57. }

  58. printl("");
  59. printl("1.5 页面刷新...");
  60. auto.refresh();
  61. printl("页面刷新完成");
  62. var afterRefresh = auto.nodeSearch(1000);
  63. printl("刷新后节点数量:", afterRefresh != '' ? afterRefresh.count() : 0);

  64. printl("");
  65. printl("1.6 设置简单模式...");
  66. auto.setSimpleModel();
  67. var simpleNode = auto.nodeSearch(1000);
  68. printl("简单模式节点数量:", simpleNode != '' ? simpleNode.count() : 0);
  69. print.log("auto.setSimpleModel() + auto.nodeSearch(1000): 完成");

  70. // ==================== 2. 实际应用场景 ====================

  71. printl("");
  72. print.log("=== 2. 实际应用场景 ===");

  73. printl("2.1 文件管理器基础操作...");

  74. // 切换到详细模式
  75. auto.setDetailedModel();

  76. // 查找所有可交互元素
  77. var interactiveElements = auto.nodeSearch(1000).clickable(true);
  78. printl("可交互元素总数:", interactiveElements != '' ? interactiveElements.count() : 0);

  79. if (interactiveElements != '' && interactiveElements.count() > 0) {
  80.     printl("前5个可交互元素:");
  81.     var displayCount = Math.min(5, interactiveElements.count());
  82.     for (var i = 0; i < displayCount; i++) {
  83.         var element = interactiveElements.getNode(i);
  84.         printl("  ", (i + 1), ".", element.getDesc(), " [", element.getID(), "]");
  85.     }
  86. }

  87. printl("");
  88. printl("2.2 查找特定类型的控件...");

  89. // 查找所有按钮
  90. var buttonElements = auto.nodeSearch(1000).className("android.widget.Button");
  91. printl("按钮元素数量:", buttonElements != '' ? buttonElements.count() : 0);

  92. // 查找所有文本视图
  93. var textViewElements = auto.nodeSearch(1000).className("android.widget.TextView");
  94. printl("文本视图数量:", textViewElements != '' ? textViewElements.count() : 0);

  95. printl("");
  96. printl("2.3 层级分析...");
  97. var layoutElements = auto.nodeSearch(1000).classIncludes("Layout");
  98. if (layoutElements != '' && layoutElements.count() > 0) {
  99.     printl("布局元素分析 (前3个):");
  100.     var displayCount = Math.min(3, layoutElements.count());
  101.     for (var i = 0; i < displayCount; i++) {
  102.         var layout = layoutElements.getNode(i);
  103.         printl("  布局", (i + 1), ":", layout.getClassName());
  104.         printl("    深度:", layout.getDepth());
  105.         printl("    面积:", layout.getArea());
  106.         printl("    边界:", layout.getBounds());
  107.     }
  108. }

  109. // ==================== 3. 实用函数 ====================

  110. printl("");
  111. print.log("=== 3. 节点方法详细演示 ===");

  112. printl("");
  113. printl("3.1 节点属性获取方法演示...");

  114. // 获取一个测试节点
  115. var testElement = auto.nodeSearch(1000).className("android.widget.TextView");
  116. if (testElement != '' && testElement.count() > 0) {
  117.     var node = testElement.getNode(0);
  118.    
  119.     printl("=== 节点属性获取方法 ===");
  120.     printl("1. getDesc() - 描述信息:", node.getDesc());
  121.     printl("2. getID() - ID:", node.getID());
  122.     printl("3. getClassName() - 类名:", node.getClassName());
  123.     printl("4. 包名属性: 包名信息通过节点属性获取(非getPackage方法)");
  124.     printl("5. getDepth() - 深度:", node.getDepth());
  125.     printl("6. getIndex() - 索引:", node.getIndex());
  126.     printl("7. getBounds() - 边界:", node.getBounds());
  127.     printl("8. getCenter() - 中心点:", node.getCenter());
  128.     printl("9. getArea() - 面积:", node.getArea());
  129.     printl("10. 百分比边界: 通过节点属性获取(非getBoundsPercent方法)");
  130.     printl("11. 百分比中心: 通过节点属性获取(非getCenterPercent方法)");
  131.     printl("12. 百分比面积: 通过节点属性获取(非getAreaPercent方法)");
  132.    
  133.     printl("");
  134.     printl("=== 节点状态方法 ===");
  135.     printl("1. isClickable() - 可点击:", node.isClickable());
  136.     printl("2. isLongClickable() - 可长按:", node.isLongClickable());
  137.     printl("3. isScrollable() - 可滚动:", node.isScrollable());
  138.     printl("4. isCheckable() - 可勾选:", node.isCheckable());
  139.     printl("5. isChecked() - 已勾选:", node.isChecked());
  140.     printl("6. isEnabled() - 启用状态:", node.isEnabled());
  141.     printl("7. isFocusable() - 可获得焦点:", node.isFocusable());
  142.     printl("8. isFocused() - 已获得焦点:", node.isFocused());
  143.     printl("9. isPassword() - 密码字段:", node.isPassword());
  144.     printl("10. isSelected() - 已选中:", node.isSelected());
  145.     printl("11. isVisibleToUser() - 用户可见:", node.isVisibleToUser());
  146.     printl("12. isEditable() - 可编辑:", node.isEditable());
  147.    
  148.     printl("");
  149.     printl("=== 节点层级方法 ===");
  150.     printl("1. getParent() - 父节点:");
  151.     var parent = node.getParent();
  152.     if (parent != '' && parent != null) {
  153.         printl("   父节点描述:", parent.getDesc());
  154.         printl("   父节点类名:", parent.getClassName());
  155.     } else {
  156.         printl("   无父节点");
  157.     }
  158.    
  159.     printl("2. getChildCount() - 子节点数量:", node.getChildCount());
  160.     printl("3. getChildren() - 获取所有子节点:");
  161.     var children = node.getChildren();
  162.     if (children != '' && children != null && children.count() > 0) {
  163.         printl("   子节点数量:", children.count());
  164.         printl("   第一个子节点:", children.getNode(0).getDesc());
  165.     } else {
  166.         printl("   无子节点");
  167.     }
  168.    
  169.     printl("");
  170.     printl("=== 节点操作方法 ===");
  171.     printl("1. click() - 点击操作演示:");
  172.     printl("   当前节点:", node.getDesc());
  173.     printl("   执行 click() 方法");
  174.     // node.click(); // 注释掉实际点击,避免意外操作
  175.    
  176.     printl("2. clickPoint() - 点击坐标:");
  177.     var center = node.getCenter();
  178.     printl("   中心坐标:", center);
  179.     printl("   执行 clickPoint() 方法");
  180.     // node.clickPoint(); // 注释掉实际点击
  181.    
  182.     printl("3. longClick() - 长按操作:");
  183.     printl("   执行 longClick() 方法");
  184.     // node.longClick(); // 注释掉实际操作
  185.    
  186.     printl("4. input() - 输入操作:");
  187.     printl("   执行 input('test') 方法");
  188.     // node.input('test'); // 注释掉实际输入
  189. }

  190. printl("");
  191. printl("3.2 节点集合操作方法演示...");

  192. var allElements = auto.nodeSearch(1000);
  193. if (allElements != '' && allElements.count() > 0) {
  194.     printl("=== 节点集合方法 ===");
  195.     printl("1. count() - 总数量:", allElements.count());
  196.    
  197.     printl("2. getNode(index) - 获取指定索引节点:");
  198.     var firstNode = allElements.getNode(0);
  199.     if (firstNode != '' && firstNode != null) {
  200.         printl("   第一个节点:", firstNode.getDesc());
  201.     }
  202.    
  203.     printl("3. getNodeList() - 获取节点列表:");
  204.     var nodeList = allElements.getNodeList();
  205.     printl("   节点列表长度:", nodeList != '' ? nodeList.length : 0);
  206.    
  207.     printl("4. getDescList() - 获取描述列表:");
  208.     var descList = allElements.getDescList();
  209.     printl("   描述列表长度:", descList != '' ? descList.length : 0);
  210.     if (descList != '' && descList.length > 0) {
  211.         printl("   前3个描述:", descList[0], descList[1], descList[2]);
  212.     }
  213.    
  214.     printl("");
  215.     printl("=== 节点过滤方法 ===");
  216.    
  217.     // 演示过滤方法
  218.     printl("1. id() - 按ID过滤:");
  219.     var idFiltered = allElements.id("com.estrongs.android.pop:id/rl_content");
  220.     printl("   过滤结果数量:", idFiltered != '' ? idFiltered.count() : 0);
  221.    
  222.     printl("2. className() - 按类名过滤:");
  223.     var classFiltered = allElements.className("android.widget.TextView");
  224.     printl("   TextView数量:", classFiltered != '' ? classFiltered.count() : 0);
  225.    
  226.     printl("3. text() - 按文本过滤:");
  227.     var textFiltered = allElements.text("文件");
  228.     printl("   包含'文件'的数量:", textFiltered != '' ? textFiltered.count() : 0);
  229.    
  230.     printl("4. textIncludes() - 按文本包含过滤:");
  231.     var textIncFiltered = allElements.textIncludes("浏览");
  232.     printl("   包含'浏览'的数量:", textIncFiltered != '' ? textIncFiltered.count() : 0);
  233.    
  234.     printl("5. clickable() - 按可点击状态过滤:");
  235.     var clickableFiltered = allElements.clickable(true);
  236.     printl("   可点击元素数量:", clickableFiltered != '' ? clickableFiltered.count() : 0);
  237.    
  238.     printl("6. depth() - 按深度过滤:");
  239.     var depthFiltered = allElements.depth(1);
  240.     printl("   深度为1的元素数量:", depthFiltered != '' ? depthFiltered.count() : 0);
  241.    
  242.     printl("7. bounds() - 按边界过滤:");
  243.     var boundsFiltered = allElements.bounds("[0,0][1080,1920]");
  244.     printl("   指定边界的元素数量:", boundsFiltered != '' ? boundsFiltered.count() : 0);
  245.    
  246.     printl("8. centerXIn() - 按X坐标范围过滤:");
  247.     var centerXFiltered = allElements.centerXIn(0, 1080);
  248.     printl("   X坐标范围0-1080的元素数量:", centerXFiltered != '' ? centerXFiltered.count() : 0);
  249.    
  250.     printl("9. centerYIn() - 按Y坐标范围过滤:");
  251.     var centerYFiltered = allElements.centerYIn(0, 1920);
  252.     printl("   Y坐标范围0-1920的元素数量:", centerYFiltered != '' ? centerYFiltered.count() : 0);
  253.    
  254.     printl("10. areaIn() - 按面积范围过滤:");
  255.     var areaFiltered = allElements.areaIn(1000, 100000);
  256.     printl("   面积1000-100000的元素数量:", areaFiltered != '' ? areaFiltered.count() : 0);
  257.    
  258.     printl("11. classIncludes() - 按类名包含过滤:");
  259.     var classIncFiltered = allElements.classIncludes("Layout");
  260.     printl("   类名包含'Layout'的数量:", classIncFiltered != '' ? classIncFiltered.count() : 0);
  261. }

  262. printl("");
  263. printl("3.3 高级节点操作演示...");

  264. printl("=== 链式调用演示 ===");
  265. var chainedResult = auto.nodeSearch(1000)
  266.     .className("android.widget.TextView")
  267.     .clickable(true)
  268.     .depth(2);

  269. printl("链式调用结果数量:", chainedResult != '' ? chainedResult.count() : 0);

  270. if (chainedResult != '' && chainedResult.count() > 0) {
  271.     printl("链式调用第一个结果:", chainedResult.getNode(0).getDesc());
  272. }

  273. printl("");
  274. print.log("=== 4. 实用函数 ===");

  275. printl("4.1 安全点击函数...");
  276. function safeClickElement(text, timeout) {
  277.     timeout = timeout || 2000;
  278.    
  279.     auto.setDetailedModel();
  280.     var element = auto.nodeSearch(timeout).text(text).clickable(true);
  281.    
  282.     if (element != '' && element.count() > 0) {
  283.         var target = element.getNode(0);
  284.         printl("找到目标元素:", text);
  285.         printl("  元素ID:", target.getID());
  286.         printl("  元素类名:", target.getClassName());
  287.         
  288.         // 执行点击
  289.         target.click();
  290.         printl("已点击元素:", text);
  291.         return true;
  292.     } else {
  293.         printl("未找到目标元素:", text);
  294.         return false;
  295.     }
  296. }

  297. printl("");
  298. printl("3.2 页面状态监控...");
  299. function monitorPageChanges() {
  300.     auto.setDetailedModel();
  301.    
  302.     var initialState = auto.nodeSearch(1000);
  303.     var initialCount = initialState != '' ? initialState.count() : 0;
  304.     printl("初始页面状态 - 元素数量:", initialCount);
  305.    
  306.     // 等待一段时间
  307.     java.lang.Thread.sleep(2000);
  308.    
  309.     var currentState = auto.nodeSearch(1000);
  310.     var currentCount = currentState != '' ? currentState.count() : 0;
  311.     printl("当前页面状态 - 元素数量:", currentCount);
  312.    
  313.     var change = currentCount - initialCount;
  314.     printl("页面变化:", change > 0 ? "增加了" + change + "个元素" : change < 0 ? "减少了" + Math.abs(change) + "个元素" : "无变化");
  315.    
  316.     return change;
  317. }

  318. var pageChange = monitorPageChanges();

  319. printl("");
  320. print.log("=== Android APP自动化核心API修正版完成 ===");
  321. printl("&#128161; 基于实际运行环境的API,确保兼容性!");
  322. print.log("所有修正版API示例已完成!");
复制代码



untoJSON.stringify 和 JSON.parse 完整示例nextAIWROK软件权限管理器实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖