B2B网络软件

 找回密码
 立即注册 审核网站号:QQ:896757558
搜索
查看: 9|回复: 0
打印 上一主题 下一主题

小红书养号脚本真实项目架

[复制链接]

1186

主题

1191

帖子

8021

积分

abc

Rank: 9Rank: 9Rank: 9

积分
8021
跳转到指定楼层
楼主
发表于 昨天 06:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

小红书养号脚本真实项目架
小红书养号脚本真实项目架 B2B网络软件

小红书养号脚本真实项目架 B2B网络软件

小红书养号脚本真实项目架 B2B网络软件




  1. /*
  2.    ╔══════════════════════════════════════════════════════════╗
  3.    ║  案例1:小红书养号脚本真实项目架
  4.    ║                                                          ║
  5.    ║  核心架构:                                               ║
  6.    ║  1. safe() 统一容错壳 — 绝不因为一个动作崩掉               ║
  7.    ║  2. pageHasText() 先预检 XML — 避开盲扫 nodeSearch 报错    ║
  8.    ║  3. findText() 节点精准定位 — 返回百分比坐标               ║
  9.    ║  4. clickText() 先预检再点击 — 最稳的套路                  ║
  10.    ║  5. 三模式统一 if/else — 无障碍/HID/代理都能跑              ║
  11.    ║  6. pressBack() 返回键四通道兜底 — 绝不卡页面               ║
  12.    ║  7. humanSwipe() 人类化滑动 — 带随机抖动                   ║
  13.    ╚══════════════════════════════════════════════════════════╝
  14. */

  15. // ======================== 配置区 ========================
  16. var 模式选择 = '无障碍模式';  // '无障碍模式' | 'HID硬件模式' | '代理模式'
  17. var 小红书包名 = 'com.xingin.xhs';
  18. var 目标点赞数 = 50;
  19. var 目标评论数 = 5;
  20. var 收藏概率 = 0.3;
  21. var 关注概率 = 0.0;  // 默认关闭关注!避免风控
  22. var 评论触发间隔 = 15;  // 每 N 次点赞评论一次

  23. /*
  24.   ⭐ 小红书详情页底部栏硬坐标(设备 1080×1920,已验证 ❤️ 可点)
  25.   
  26.   布局:📝说点什么...  ── 💬评论 ── ⭐收藏 ── ❤️点赞
  27.   位置:  ~620px          ~800px     ~900px    ~994px
  28.   y = 1536 (屏高的 0.80)
  29.   
  30.   按比例换算其他分辨率:
  31.   ────────────────────────────────
  32.   设备分辨率     ❤️点赞     ⭐收藏     💬评论
  33.   1080×1920   (994,1536)  (900,1536) (800,1536)
  34.   ────────────────────────────────
  35.   */
  36. var XHS_COORDS = {
  37.     w: 1080, h: 1920,          // 设计基准分辨率(按比例缩放)
  38.     like:   { xPct: 0.92, yPct: 0.80 },  // ❤️ 点赞   已验证!
  39.     fav:    { xPct: 0.83, yPct: 0.80 },  // ⭐ 收藏
  40.     comment:{ xPct: 0.74, yPct: 0.80 }   // 💬 评论
  41. };

  42. var 评论话术 = [
  43.     '好好看呀!请问是用什么软件做的呀?',
  44.     '求教程!这个效果太绝了 👏',
  45.     '姐妹手速也太快了吧 😂',
  46.     '码住码住!周末就试试',
  47.     '收藏了!下次做一定用得上',
  48. ];

  49. /** 获取当前设备屏幕尺寸 */
  50. function getScreen() {
  51.     var w = safe(function () { return screen.getScreenWidth(); }, '屏宽', XHS_COORDS.w);
  52.     var h = safe(function () { return screen.getScreenHeight(); }, '屏高', XHS_COORDS.h);
  53.     if (!w || w <= 0) w = XHS_COORDS.w;
  54.     if (!h || h <= 0) h = XHS_COORDS.h;
  55.     return [Math.round(w), Math.round(h)];
  56. }

  57. /** 按 XHS_COORDS 比例坐标 → 屏幕像素坐标 */
  58. function xhsXY(coord) {
  59.     var s = getScreen();
  60.     return [Math.round(s[0] * coord.xPct), Math.round(s[1] * coord.yPct)];
  61. }

  62. // ======================== 稳定运行库(复刻你的 05_特殊技巧合集)========================
  63. function llog(m) { try { printl(m); } catch (e) {} }
  64. function sleepMs(ms) { try { java.lang.Thread.sleep(ms); } catch (e) {} }
  65. function nowMs() { return java.lang.System.currentTimeMillis(); }
  66. function rnd(a, b) { try { return rand.randNumber(a, b); } catch (e) { return a + Math.floor(Math.random() * (b - a + 1)); } }
  67. function humanDelay(minMs, maxMs) { sleepMs(rnd(minMs, maxMs)); }

  68. /** 统一容错壳:任何可能报错的调用都包一层 */
  69. function safe(fn, tag, defVal) {
  70.     try { return fn(); }
  71.     catch (e) { llog('⚠ [' + tag + '] ' + String(e.message).substring(0, Math.min(40, String(e.message).length))); return defVal === undefined ? null : defVal; }
  72. }

  73. /** 重试执行器 */
  74. function retry(fn, times, gapMs, tag) {
  75.     times = times || 3; gapMs = gapMs || 1500; tag = tag || '操作';
  76.     for (var i = 1; i <= times; i++) {
  77.         var ok = false;
  78.         try { ok = !!fn(i); } catch (e) { llog('⚠ [' + tag + '] 第' + i + '次异常'); }
  79.         if (ok) { llog('✔ [' + tag + '] 第' + i + '次成功'); return true; }
  80.         llog('… [' + tag + '] 第' + i + '次未成功');
  81.         if (i < times) sleepMs(gapMs);
  82.     }
  83.     llog('✘ [' + tag + '] ' + times + '次都没成功');
  84.     return false;
  85. }

  86. /**
  87. * 预检:当前页面有没有这段文字
  88. * 真实生产源码写法(小红书/收藏加点赞.js 第16行):
  89. *   if(auto.getXml().includes("打开App")){...}
  90. * Rhino ES5 下 Java String 自带 .includes(),直接用!
  91. */
  92. function pageHasText(text) {
  93.     if (!text) return false;
  94.     return safe(function () {
  95.         var xml = auto.getXml();
  96.         if (xml == null) return false;
  97.         return xml.includes(text);
  98.     }, 'pageHasText("' + text + '")', false);
  99. }

  100. /** 找文字节点并返回百分比坐标 [x%, y%] */
  101. function findText(text, timeoutMs) {
  102.     var deadline = nowMs() + (timeoutMs || 8000);
  103.     while (nowMs() < deadline) {
  104.         if (pageHasText(text)) {
  105.             var res = safe(function () {
  106.                 var nodes = auto.nodeSearch(1500).textIncludes(text);
  107.                 if (nodes == '' || nodes == null) return null;
  108.                 var node = nodes.getNode(0);
  109.                 var p = node.getCenterPoint();
  110.                 return [p.XPercent(), p.YPercent()];
  111.             }, 'findText', null);
  112.             if (res) return res;
  113.         }
  114.         sleepMs(500);
  115.     }
  116.     return null;
  117. }

  118. /** 点击文字(先预检再精准查,带超时) */
  119. function clickText(text, timeoutMs) {
  120.     var xy = findText(text, timeoutMs);
  121.     if (!xy) { llog('✘ 没找到: ' + text); return false; }
  122.     safe(function () { auto.clickPercent(xy[0], xy[1]); }, 'clickPercent');
  123.     llog('✔ 点击「' + text + '」@ ' + xy[0].toFixed(3) + ',' + xy[1].toFixed(3));
  124.     return true;
  125. }

  126. /** 返回键四通道兜底 */
  127. function pressBack() {
  128.     if (safe(function () { auto.pressBack(); return true; }, 'auto.pressBack', false)) { llog('← 返回(auto.pressBack)'); return true; }
  129.     if (safe(function () { auto.back(); return true; }, 'auto.back', false)) { llog('← 返回(auto.back)'); return true; }
  130.     if (safe(function () { device.pressBack(); return true; }, 'device.pressBack', false)) { llog('← 返回(device.pressBack)'); return true; }
  131.     llog('✘ 所有返回通道都不可用');
  132.     return false;
  133. }

  134. /**
  135. * 短视频/笔记快速翻页(一次到底)
  136. * 真实生产源码写法(小红书回粉.js 第0行):
  137. *   auto.swipPercent(0.4931,0.2363,0.5069,0.7383)
  138. */
  139. function quickFlingUp() {
  140.     safe(function () {
  141.         auto.swipPercent(
  142.             rnd(0.42, 0.55), rnd(0.82, 0.88),  // 起点:底部中间
  143.             rnd(0.42, 0.55), rnd(0.10, 0.18)   // 终点:顶部中间
  144.         );
  145.     }, 'auto.swipPercent');
  146.     llog('↕ 上滑换笔记...');
  147. }

  148. /** 三模式万能点击 */
  149. function 三模式点击(x, y, 标签) {
  150.     if (x === null || x === undefined || isNaN(x) || y === null || y === undefined || isNaN(y)) { return false; }
  151.     x = Math.round(Number(x)); y = Math.round(Number(y));
  152.     if (模式选择 == '无障碍模式') { auto.clickPoint(x, y); }
  153.     else if (模式选择 == 'HID硬件模式') { try { hid.click(x, y); } catch (e) { auto.clickPoint(x, y); } }
  154.     else { try { agent.click(x, y); } catch (e) { auto.clickPoint(x, y); } }
  155.     llog('&#127919; ' + 标签 + ' (' + x + ',' + y + ')');
  156.     return true;
  157. }

  158. /** 弹窗自动处理(关键词词库 → 先 XML 预检 → 再精准点) */
  159. function 处理弹窗() {
  160.     var 弹窗关键词 = ['跳过', '关闭', '残忍离开', '稍后再说', '拒绝', '不同意', '以后再说', '始终允许', '确定'];
  161.     for (var i = 0; i < 弹窗关键词.length; i++) {
  162.         var kw = 弹窗关键词[i];
  163.         if (pageHasText(kw)) {
  164.             var xy = findText(kw, 1000);
  165.             if (xy) {
  166.                 var w = safe(function () { return screen.getScreenWidth(); }, '屏宽', 1080);
  167.                 var h = safe(function () { return screen.getScreenHeight(); }, '屏高', 2400);
  168.                 三模式点击(Math.round(xy[0] * w), Math.round(xy[1] * h), '关闭"' + kw + '"');
  169.                 humanDelay(1200, 1800);
  170.                 return true;
  171.             }
  172.         }
  173.     }
  174.     return false;
  175. }

  176. // ======================== 小红书详情页动作:全部硬坐标 ========================

  177. /** 返回发现页(必须验证真的回去了,不行再按) */
  178. function 返回发现页() {
  179.     var s = getScreen();
  180.     for (var i = 1; i <= 3; i++) {
  181.         pressBack();
  182.         humanDelay(800, 1200);
  183.         // 验证:发现页应该有"发现"/"消息",没有"说点什么"
  184.         var 在发现页 = pageHasText('发现') || pageHasText('消息');
  185.         var 还在详情 = pageHasText('说点什么');
  186.         if (在发现页 && !还在详情) {
  187.             if (i > 1) llog('  ✅ 第' + i + '次返回成功');
  188.             return true;
  189.         }
  190.     }
  191.     llog('  &#128680; 返回失败,强制退出(可能卡了)');
  192.     // 实在不行,重启 App
  193.     safe(function () { app.resetApp(小红书包名); }, 'resetApp');
  194.     retry(function () { return pageHasText('发现') || pageHasText('消息'); }, 15, 1000, '重启后等首页');
  195.     return false;
  196. }

  197. /** 点进笔记详情页(3 次重试) */
  198. function 点进详情页() {
  199.     var s = getScreen();
  200.     for (var attempt = 1; attempt <= 3; attempt++) {
  201.         // 瀑布流双列笔记卡片位置:y 范围 550~1200(避开底部栏和顶部)
  202.         var 列 = rnd(0, 1);                // 0=左列 1=右列
  203.         var x = 列 == 0 ? rnd(180, 360) : rnd(700, 900);
  204.         x = Math.round(x * s[0] / 1080);
  205.         var y = rnd(550, 1200);
  206.         y = Math.round(y * s[1] / 1920);
  207.         三模式点击(x, y, '&#128433;️ 进笔记(第' + attempt + '次)');
  208.         humanDelay(1500, 2200);
  209.         if (pageHasText('说点什么')) return true;
  210.         // 失败就返回再试
  211.         if (attempt < 3) {
  212.             pressBack();
  213.             humanDelay(500, 700);
  214.         }
  215.     }
  216.     return false;
  217. }

  218. /**
  219. * 小红书点赞
  220. * 真实生产源码写法(收藏加点赞.js 第33-35行):
  221. *   var nodes = auto.nodeSearch().text("说点什么...").className("android.widget.TextView");
  222. *   var node = nodes.getNode(0);
  223. *   var success = node.nextNode().nextNode().nextNode().clickPoint();
  224. *
  225. * 优先用这个无障碍树节点链(不会因分辨率变化失效),失败再兜底硬坐标。
  226. */
  227. function 小红书点赞() {
  228.     // === 方案 A:nodeSearch + nextNode 链(真实生产套路)===
  229.     var nodeOk = safe(function () {
  230.         var nodes = auto.nodeSearch().text("说点什么...").className("android.widget.TextView");
  231.         if (!nodes) return null;
  232.         var node = nodes.getNode(0);
  233.         if (!node) return null;
  234.         // 真实源码跳 3 次 = ❤️ 点赞按钮
  235.         var likeBtn = node.nextNode().nextNode().nextNode();
  236.         if (!likeBtn) return null;
  237.         var ok = likeBtn.clickPoint();
  238.         return ok;
  239.     }, 'nodeSearch点赞', null);
  240.    
  241.     if (nodeOk === true) {
  242.         llog('  ✅ node链点赞成功');
  243.         humanDelay(400, 700);
  244.         return true;
  245.     }
  246.    
  247.     // === 方案 B:硬坐标兜底(已验证跑通)===
  248.     var xy = xhsXY(XHS_COORDS.like);
  249.     xy[0] += rnd(-8, 8); xy[1] += rnd(-8, 8);
  250.     三模式点击(xy[0], xy[1], '❤️ 点赞(硬坐标兜底)');
  251.     humanDelay(400, 700);
  252.     return true;
  253. }

  254. /**
  255. * 小红书收藏
  256. * 真实源码没有收藏的写法,推测 nextNode 多 1 次
  257. * 失败再兜底硬坐标
  258. */
  259. function 小红书收藏() {
  260.     // === 方案 A:nodeSearch + nextNode 链 ===
  261.     var nodeOk = safe(function () {
  262.         var nodes = auto.nodeSearch().text("说点什么...").className("android.widget.TextView");
  263.         if (!nodes) return null;
  264.         var node = nodes.getNode(0);
  265.         if (!node) return null;
  266.         // ❤️ 跳3次 = node(3),⭐ 再跳1次 = node(4)
  267.         var favBtn = node.nextNode().nextNode().nextNode().nextNode();
  268.         if (!favBtn) return null;
  269.         return favBtn.clickPoint();
  270.     }, 'nodeSearch收藏', null);
  271.    
  272.     if (nodeOk === true) {
  273.         llog('  ✅ node链收藏成功');
  274.         humanDelay(300, 600);
  275.         return true;
  276.     }
  277.    
  278.     // === 方案 B:硬坐标兜底 ===
  279.     var xy = xhsXY(XHS_COORDS.fav);
  280.     xy[0] += rnd(-8, 8); xy[1] += rnd(-8, 8);
  281.     三模式点击(xy[0], xy[1], '⭐ 收藏(硬坐标兜底)');
  282.     humanDelay(300, 600);
  283.     return true;
  284. }

  285. // ======================== 小红书养号主循环 ========================
  286. function 小红书养号引擎() {
  287.     llog('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  288.     llog('  小红书养号脚本 v2 · 硬坐标版(已验证 ❤️ 坐标)');
  289.     llog('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');

  290.     // 启动小红书
  291.     llog('&#128241; 启动小红书...');
  292.     try { app.resetApp(小红书包名); } catch (e) { try { app.openApp(小红书包名); } catch (e2) {} }
  293.    
  294.     // 真实源码等待写法:sleep.waitString
  295.     // 小红书首页必然有"发现"或"消息"
  296.     var 启动成功 = safe(function () { sleep.waitString(字符='发现',毫秒=15000); return true; }, 'waitString发现', false)
  297.                 || safe(function () { sleep.waitString(字符='消息',毫秒=15000); return true; }, 'waitString消息', false);
  298.    
  299.     if (!启动成功) {
  300.         retry(function () { return pageHasText('发现') || pageHasText('消息'); }, 30, 1000, '兜底等小红书启动');
  301.     }
  302.     humanDelay(1500, 2500);

  303.     // 打印屏幕信息,方便校对坐标
  304.     var s = getScreen();
  305.     llog('&#128208; 设备分辨率: ' + s[0] + ' × ' + s[1]);
  306.     var likeXY = xhsXY(XHS_COORDS.like);
  307.     var favXY = xhsXY(XHS_COORDS.fav);
  308.     llog('&#127919; ❤️坐标=(' + likeXY[0] + ',' + likeXY[1] + ')  ⭐坐标=(' + favXY[0] + ',' + favXY[1] + ')');

  309.     var 计数器 = { 点赞: 0, 收藏: 0, 跳过: 0, 失败: 0 };

  310.     while (计数器.点赞 < 目标点赞数) {
  311.         try {
  312.             // ===== 弹窗 =====
  313.             处理弹窗();

  314.             // ===== 1. 确认在发现页 =====
  315.             if (!pageHasText('发现') && !pageHasText('消息')) {
  316.                 llog('⚠ 不在发现页,尝试返回...');
  317.                 返回发现页();
  318.                 humanDelay(800, 1200);
  319.                 continue;
  320.             }

  321.             // ===== 2. 上滑换一条新笔记 =====
  322.             llog('  &#128220; 上滑换笔记...');
  323.             quickFlingUp();
  324.             humanDelay(800, 1500);

  325.             // ===== 3. 点击进笔记详情页(3 次重试)=====
  326.             if (!点进详情页()) {
  327.                 计数器.跳过++;
  328.                 llog('    ❌ 进详情页失败,跳过(累计 ' + 计数器.跳过 + ' 次)');
  329.                 if (计数器.跳过 >= 5) {
  330.                     llog('&#128680; 连续 5 次进详情页失败,脚本退出检查坐标');
  331.                     return;
  332.                 }
  333.                 continue;
  334.             }

  335.             // ===== 4. 点赞(硬坐标!)=====
  336.             humanDelay(300, 600);
  337.             小红书点赞();
  338.             计数器.点赞++;
  339.             计数器.失败 = 0;
  340.             计数器.跳过 = 0;
  341.             llog('  ❤️ 点赞 #' + 计数器.点赞 + '/' + 目标点赞数);
  342.             humanDelay(300, 700);

  343.             // ===== 5. 收藏(概率触发)=====
  344.             if (Math.random() < 收藏概率) {
  345.                 小红书收藏();
  346.                 计数器.收藏++;
  347.                 llog('  ⭐ 收藏 #' + 计数器.收藏);
  348.             }
  349.             humanDelay(200, 500);

  350.             // ===== 6. 返回到发现页(验证式返回)=====
  351.             humanDelay(300, 600);
  352.             返回发现页();

  353.             // ===== 7. 每 10 条休息一下 =====
  354.             if (计数器.点赞 % 10 === 0) {
  355.                 var 休息秒 = rnd(5, 12);
  356.                 llog('  &#128719;️ 已点赞 10 条,休息 ' + 休息秒 + 's 再继续...');
  357.                 humanDelay(休息秒 * 1000, 休息秒 * 1000);
  358.             }

  359.         } catch (e) {
  360.             计数器.失败++;
  361.             llog('⚠️ 异常#' + 计数器.失败 + ': ' + String(e.message).substring(0, 50));
  362.             humanDelay(1500, 3000);
  363.             if (计数器.失败 >= 10) {
  364.                 llog('&#128680; 熔断!' + 计数器.点赞 + '❤️ ' + 计数器.收藏 + '⭐ ' + 计数器.跳过 + '跳过');
  365.                 return;
  366.             }
  367.         }
  368.     }

  369.     llog('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  370.     llog('  ✅ 完成!');
  371.     llog('    ❤️ 点赞  ' + 计数器.点赞);
  372.     llog('    ⭐ 收藏  ' + 计数器.收藏);
  373.     llog('    ⏭️ 跳过  ' + 计数器.跳过);
  374.     llog('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  375. }

  376. 小红书养号引擎();
复制代码


回复

使用道具 举报

本版积分规则

关闭

QQ|»营销软件综合讨论|»营销软件有问必答|»营销软件教程专区|»营销软件POST脚本分享|»营销软件普通脚本分享|»营销软件软件资讯|»营销软件精品软件|»营销软件更新公告|营销软件|B2B软件|B2B网络软件 ( 京ICP备09078825号 )本网站开发的营销软件是一款新的网络营销软件,这款营销可以去网站软件,博客软件,B2B软件,分类信息网发贴,可以抢沙发,可以到百度文库上传WORD文档,可以到一些是相册网站自动上传图片,这个自动发帖软件自带云蜘蛛,加快收录,有6种对接打码接口,方便,效率高,速度快,而且对拖动的验证码全网第一家独家支持,全部原创技术,独家研发,正版原创带版权软件。选择万能营销软件,就选择了一种赚钱的效率,从没有被超越过,一直在努力研发新技术。放飞梦想,解放双手,来点创意,成就你的梦想,就在万能营销软件开始

map2

GMT+8, 2026-10-2 08:37 , Processed in 0.104613 second(s), 35 queries .

快速回复 返回顶部 返回列表