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

[24小时收录超级好的网站] 安卓脚本示例实时截图判断页面变化

[复制链接]

2534

主题

2582

帖子

1万

积分

积分
15374
跳转到指定楼层
楼主
安卓脚本示例实时截图判断页面变化


安卓脚本示例实时截图判断页面变化 群发软件发帖工具

安卓脚本示例实时截图判断页面变化 群发软件发帖工具
  1. // 实时截图判断页面变化示例
  2. // 技术交流QQ群711841924群一,苹果内测群,528816639
  3. // 采用全屏高采样率像素对比,间隔5秒检测

  4. /**
  5. * 截取当前屏幕并保存为Mat对象
  6. * @returns {Object} Mat对象,失败返回null
  7. */
  8. function captureScreen() {
  9.     try {
  10.         // 获取屏幕尺寸
  11.         var screenWidth = 1080;
  12.         var screenHeight = 1920;
  13.         
  14.         if (typeof screen !== 'undefined') {
  15.             if (typeof screen.getScreenWidth === 'function') {
  16.                 screenWidth = screen.getScreenWidth();
  17.                 screenHeight = screen.getScreenHeight();
  18.             }
  19.         }
  20.         
  21.         printl("截取屏幕: " + screenWidth + "x" + screenHeight);
  22.         var screenshot = screen.screenShot(screenWidth, screenHeight, 100);
  23.         return screenshot.getMat();
  24.     } catch (e) {
  25.         printl("截图失败: " + String(e));
  26.         return null;
  27.     }
  28. }

  29. /**
  30. * 比较两个Mat对象的相似度(通过像素点采样)
  31. * @param {Object} mat1 - 第一个Mat对象
  32. * @param {Object} mat2 - 第二个Mat对象
  33. * @param {number} sampleRate - 采样率(0-1),默认0.2表示采样20%的像素
  34. * @returns {number} 相似度(0-1),1表示完全相同
  35. */
  36. function compareMats(mat1, mat2, sampleRate) {
  37.     if (!mat1 || !mat2) {
  38.         printl("ERR: Mat对象为空,无法比较");
  39.         return 0;
  40.     }
  41.    
  42.     try {
  43.         sampleRate = sampleRate || 0.2; // 提高默认采样率到20%
  44.         
  45.         var width1 = mat1.width();
  46.         var height1 = mat1.height();
  47.         var width2 = mat2.width();
  48.         var height2 = mat2.height();
  49.         
  50.         printl("图片1尺寸: " + width1 + "x" + height1);
  51.         printl("图片2尺寸: " + width2 + "x" + height2);
  52.         
  53.         // 尺寸不同直接认为不同
  54.         if (width1 !== width2 || height1 !== height2) {
  55.             printl("⚠️ 图片尺寸不同,判定为页面已变化");
  56.             return 0;
  57.         }
  58.         
  59.         // 计算采样步长
  60.         var stepX = Math.floor(1 / sampleRate);
  61.         var stepY = Math.floor(1 / sampleRate);
  62.         
  63.         var totalPixels = 0;
  64.         var samePixels = 0;
  65.         var changedPixels = 0;
  66.         
  67.         // 采样比较像素点
  68.         for (var y = 0; y < height1; y += stepY) {
  69.             for (var x = 0; x < width1; x += stepX) {
  70.                 try {
  71.                     var pixel1 = mat1.get(y, x);
  72.                     var pixel2 = mat2.get(y, x);
  73.                     
  74.                     if (pixel1 && pixel2) {
  75.                         totalPixels++;
  76.                         
  77.                         // 比较RGB值(降低容差,提高灵敏度)
  78.                         var diff = Math.abs(pixel1[0] - pixel2[0]) +
  79.                                   Math.abs(pixel1[1] - pixel2[1]) +
  80.                                   Math.abs(pixel1[2] - pixel2[2]);
  81.                         
  82.                         // 降低阈值从30到10,更灵敏
  83.                         if (diff < 10) {
  84.                             samePixels++;
  85.                         } else {
  86.                             changedPixels++;
  87.                         }
  88.                     }
  89.                 } catch (e) {
  90.                     // 忽略单个像素读取错误
  91.                 }
  92.             }
  93.         }
  94.         
  95.         if (totalPixels === 0) {
  96.             printl("ERR: 没有可比较的像素点");
  97.             return 0;
  98.         }
  99.         
  100.         var similarity = samePixels / totalPixels;
  101.         var changeRate = changedPixels / totalPixels;
  102.         
  103.         printl("采样像素总数: " + totalPixels);
  104.         printl("相似像素数: " + samePixels);
  105.         printl("变化像素数: " + changedPixels);
  106.         printl("变化率: " + (changeRate * 100).toFixed(2) + "%");
  107.         printl("相似度: " + (similarity * 100).toFixed(2) + "%");
  108.         
  109.         return similarity;
  110.     } catch (e) {
  111.         printl("ERR: 比较Mat对象错误: " + String(e));
  112.         return 0;
  113.     }
  114. }

  115. /**
  116. * 基础页面变化检测 - 通过两次截图对比
  117. * @param {number} interval - 两次截图间隔时间(秒)
  118. * @param {number} threshold - 相似度阈值(0-1),低于此值认为页面变化,默认0.90(更敏感)
  119. * @returns {boolean} 页面是否发生变化(true=变化,false=未变化)
  120. */
  121. function isPageChangedByScreenshot(interval, threshold) {
  122.     printl("=== 开始截图对比页面变化检测 ===");
  123.     printl("截图间隔: " + interval + "秒");
  124.     printl("相似度阈值: " + (threshold * 100).toFixed(1) + "%");
  125.     printl("&#128161; 提示: 请在" + interval + "秒内切换页面或滚动屏幕");
  126.    
  127.     try {
  128.         // 第一次截图
  129.         printl("\n&#128248; 进行第1次截图...");
  130.         var mat1 = captureScreen();
  131.         if (!mat1) {
  132.             printl("ERR: 第1次截图失败");
  133.             return false;
  134.         }
  135.         printl("✅ 第1次截图成功");
  136.         
  137.         // 等待指定时间
  138.         printl("\n⏰ 等待 " + interval + " 秒...");
  139.         printl("&#128073; 请在此期间切换页面、滚动屏幕或改变界面内容");
  140.         sleep.second(interval);
  141.         
  142.         // 第二次截图
  143.         printl("\n&#128248; 进行第2次截图...");
  144.         var mat2 = captureScreen();
  145.         if (!mat2) {
  146.             printl("ERR: 第2次截图失败");
  147.             mat1 = null; // 释放资源
  148.             return false;
  149.         }
  150.         printl("✅ 第2次截图成功");
  151.         
  152.         // 比较两次截图
  153.         printl("\n&#128269; 开始比较两次截图...");
  154.         var similarity = compareMats(mat1, mat2, 0.2); // 提高采样率到20%
  155.         
  156.         // 释放Mat资源
  157.         mat1 = null;
  158.         mat2 = null;
  159.         
  160.         // 判断是否变化(降低阈值到0.90,更敏感)
  161.         threshold = threshold || 0.90;
  162.         var changed = (similarity < threshold);
  163.         
  164.         printl("\n=== 检测结果 ===");
  165.         printl("相似度: " + (similarity * 100).toFixed(2) + "%");
  166.         printl("阈值: " + (threshold * 100).toFixed(1) + "%");
  167.         
  168.         if (changed) {
  169.             printl("✅✅✅ 结论: 页面已变化!检测到 " + ((1 - similarity) * 100).toFixed(2) + "% 的差异");
  170.         } else {
  171.             printl("⭕ 结论: 页面未变化(差异太小,可能需要更大改动)");
  172.         }
  173.         
  174.         return changed;
  175.     } catch (e) {
  176.         printl("ERR: 截图对比页面变化检测错误: " + String(e));
  177.         return false;
  178.     }
  179. }











  180. /**
  181. * 演示页面变化检测方法
  182. */
  183. function demonstratePageChangeDetection() {
  184.     printl("=== AIWROK 实时截图页面变化检测(最准确版)===");
  185.    
  186.     // 安全获取APP版本
  187.     try {
  188.         if (typeof app !== 'undefined' && app && typeof app.version !== 'undefined') {
  189.             printl("APP版本: " + app.version);
  190.         } else {
  191.             printl("APP版本: 未知");
  192.         }
  193.     } catch (e) {
  194.         printl("获取APP版本失败: " + String(e));
  195.     }
  196.    
  197.     // 获取屏幕尺寸
  198.     var screenWidth = 1080;
  199.     var screenHeight = 1920;
  200.    
  201.     try {
  202.         if (typeof screen !== 'undefined' && screen) {
  203.             if (typeof screen.getScreenWidth === 'function') {
  204.                 screenWidth = screen.getScreenWidth();
  205.                 screenHeight = screen.getScreenHeight();
  206.             }
  207.         }
  208.     } catch (e) {
  209.         printl("获取屏幕尺寸失败,使用默认值: " + String(e));
  210.     }
  211.    
  212.     printl("设备分辨率: " + screenWidth + "x" + screenHeight);
  213.     printl("\n&#128204; 检测方法: 全屏高采样率像素对比");
  214.     printl("&#128204; 检测间隔: 5秒");
  215.     printl("&#128204; 灵敏度: 高(采样率25%,颜色阈值10,相似度阈值90%)");
  216.    
  217.     // 执行页面变化检测
  218.     printl("\n=== 开始页面变化检测 ===");
  219.     printl("⚠️⚠️⚠️ 重要提示 ⚠️⚠️⚠️");
  220.     printl("在接下来的5秒内,请务必:");
  221.     printl("  1. 切换到另一个页面/应用");
  222.     printl("  2. 或者大幅滚动当前页面");
  223.     printl("  3. 或者弹出对话框/菜单");
  224.     printl("否则将检测不到变化!");
  225.    
  226.     var changed = isPageChangedByScreenshot(5, 0.90);
  227.    
  228.     printl("\n=== 最终检测结果 ===");
  229.     if (changed) {
  230.         printl("✅✅✅ 页面已变化!检测成功!");
  231.     } else {
  232.         printl("⭕ 页面未变化");
  233.         printl("&#128161; 如果确实有变化但未检测到,请检查:");
  234.         printl("   1. 是否在5秒内进行了明显的页面切换");
  235.         printl("   2. 变化幅度是否足够大");
  236.         printl("   3. 可以尝试降低阈值,如: isPageChangedByScreenshot(5, 0.85)");
  237.     }
  238.    
  239.     printl("\n=== 检测完成 ===");
  240. }



  241. /**
  242. * 运行页面变化检测示例
  243. */
  244. function runPageChangeDetectionExample() {
  245.     printl("开始执行实时截图页面变化检测示例");
  246.     printl("⚠️ 本示例完全基于实时截图,不需要任何CV文件");
  247.     printl("⚠️ 采用最准确的全屏高采样率对比方法");
  248.     printl("⚠️ 检测间隔: 5秒\n");
  249.    
  250.     // 演示页面变化检测
  251.     demonstratePageChangeDetection();
  252.    
  253.     printl("\n页面变化检测示例执行完毕");
  254. }

  255. // 运行示例
  256. runPageChangeDetectionExample();
复制代码



unto苹果脚本7种不同的OCR识别nextnocontent
回复

使用道具 举报

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

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    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三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖