B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 1|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

ÆßèÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü

[¸´ÖÆÁ´½Ó]

1161

Ö÷Ìâ

1166

Ìû×Ó

7921

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7921
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
ÆßèÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü


ÆßèÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü B2BÍøÂçÈí¼þ

ÆßèÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü B2BÍøÂçÈí¼þ
ÆßèÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü B2BÍøÂçÈí¼þ

  1. // =============================================================================
  2. //  Í¨ÓÃÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü£¨Æßè/·¬ÇÑ/¿ìÒôµÈͨÓð棩
  3. //  Æ½Ì¨: AIWROK Android (ES5 ÑϸñÓï·¨)
  4. //  Ô­Àí: ·­Ò³ÔĶÁ + ¿´¹ã¸æÁì½±Àø + ·À¼ì²âËæ»ú»¯
  5. //  Ìصã: ÿ¸öAppÖ»ÐèÅäÖðüÃûºÍ·­Ò³·½Ïò£¬¿ò¼Ü×Ô¶¯´¦ÀíÆäÓàÂß¼­
  6. //
  7. //  Ö§³ÖApp:
  8. //    1. ÆßèС˵     com.kmxs.reader          ·­Ò³·½Ïò: horizontal(×óÓÒ)
  9. //    2. ·¬ÇÑÃâ·ÑС˵  com.dragon.read           ·­Ò³·½Ïò: horizontal(×óÓÒ)
  10. //    3. ¿ìÒô         com.kuaiyin.x             ·­Ò³·½Ïò: vertical(ÉÏÏÂ)
  11. //    4. ¶¶Òô¼«ËÙ°æ   com.ss.android.ugc.aweme.lite   ·­Ò³·½Ïò: vertical(ÉÏÏÂ)
  12. //    5. ×Ô¶¨ÒåApp    (ÔÚAPP±íÀïÌí¼Ó¼´¿É)
  13. //
  14. //  ·À¼ì²â²ßÂÔ:
  15. //    - Ëæ»ú·­Ò³¼ä¸ô (8~18Ã룬ÿ¸öÒ³Ãæ²»Í¬)
  16. //    - Ëæ»úÍ£Áôʱ³¤ (ÔÚÒ³ÃæÉ϶àÍ£Ò»»áÔÙ·­)
  17. //    - Ëæ»ú»¬¶¯¹ì¼£ (Æðµã/Öյ㶼ÓÐÎ¢Ð¡Æ«ÒÆ)
  18. //    - Ëæ»ú»¬¶¯ËÙ¶È (300~700msÖ®¼ä)
  19. //    - ż¶û×ö"»Ø·­"¶¯×÷ (Ä£ÄâÕæÈË»ØÍ·¿´Ò»ÏÂ)
  20. //    - ż¶û×ö"µãÔÞ"¶¯×÷ (Ä£ÄâÕæÈË»¥¶¯)
  21. //    - ÿ30·ÖÖÓÐÝÏ¢Ò»´Î (Ä£ÄâÕæÈËÀ뿪)
  22. // =============================================================================

  23. print.log("¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
  24. print.log("¨U  Í¨ÓÃÔĶÁ׬Ǯ×Ô¶¯Ë¢¿ò¼Ü v1.0                  ¨U");
  25. print.log("¨U  Æßè/·¬ÇÑ/¿ìÒôµÈͨÓà | ·À¼ì²âËæ»ú»¯            ¨U");
  26. print.log("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a");
  27. print.time();

  28. // =============================================================================
  29. //  µÚÒ»²¿·Ö£ºÅäÖã¨Ö»Ðè¸ÄÕâÀï¾ÍÄÜÊÊÅäÐÂApp£©
  30. // =============================================================================

  31. var CONFIG = {
  32.     // ====== Ñ¡ÔñÄ¿±êApp (1~4) ======
  33.     Ä¿±êApp±àºÅ: 1,

  34.     // ====== ÔËÐÐʱ³¤ ======
  35.     ×ÜÔËÐзÖÖÓ: 60,                 // ×ܹ²Åܶà¾Ã£¨·ÖÖÓ£©
  36.     ÿ¸ôN·ÖÖÓÐÝÏ¢: 30,              // ÿÅÜN·ÖÖÓÐÝÏ¢Ò»´Î
  37.     ÐÝÏ¢ÃëÊý: 30,                   // ÿ´ÎÐÝÏ¢¶àÉÙÃë

  38.     // ====== ·­Ò³²ÎÊý£¨Ëæ»ú·¶Î§£© ======
  39.     ×îСͣÁôÃë: 8,                  // ÿҳ×îÉÙÍ£ÁôÃëÊý
  40.     ×î´óÍ£ÁôÃë: 18,                 // ÿҳ×î¶àÍ£ÁôÃëÊý
  41.     »¬¶¯Ê±³¤×îСºÁÃë: 300,           // »¬¶¯ËÙ¶ÈÏÂÏÞ
  42.     »¬¶¯Ê±³¤×î´óºÁÃë: 700,           // »¬¶¯ËÙ¶ÈÉÏÏÞ

  43.     // ====== ·À¼ì²â¸ÅÂÊ ======
  44.     »Ø·­¸ÅÂÊ: 0.08,                 // 8%¸ÅÂÊ×öÒ»´Î»Ø·­¶¯×÷
  45.     µãÔÞ¸ÅÂÊ: 0.05,                 // 5%¸ÅÂÊ×öÒ»´ÎË«»÷µãÔÞ
  46.     ÐÝÏ¢¸ÅÂÊ: 0.03,                 // 3%¸ÅÂʶîÍâ¶àÍ£Ò»»á

  47.     // ====== ¿´¹ã¸æÁì½±Àø ======
  48.     ¿´¹ã¸æ¼ä¸ô·ÖÖÓ: 5,               // ÿN·ÖÖÓÈ¥¿´Ò»´Î¹ã¸æÁì½±Àø
  49.     ¹ã¸æµÈ´ýÃë: 30,                  // ¿´¹ã¸æµÈ´ýÃëÊý

  50.     // ====== µ¯´°¹Ø¼ü´Ê ======
  51.     µ¯´°¹Ø¼ü´Ê: [
  52.         "ÎÒÖªµÀÁË", "ÖªµÀÁË", "Ôݲ»¿ªÆô", "ÒÔºóÔÙ˵", "È¡Ïû",
  53.         "Ôݲ»¸üÐÂ", "Ï´ÎÔÙ˵", "¾Ü¾ø", "²»ÔÊÐí", "Ìø¹ý", "¹Ø±Õ",
  54.         "Ôݲ»ÁìÈ¡", "ÉÔºóÔÙ˵", "²»ÔÙÌáʾ", "Ôݲ»Ç©µ½", "¼ÌÐøÔĶÁ",
  55.         "Ôݲ»²Î¼Ó", "²»ÁËлл", "ÒÔºóÔÙÁì", "Ï´ÎÔÙÁì"
  56.     ],

  57.     // ====== ÔĶÁÒ³ÌØÕ÷ÎÄ×Ö£¨¶à¸öÂú×ãÒ»¸ö¼´ÈÏΪÔÚÔĶÁÒ³£© ======
  58.     ÔĶÁÒ³ÌØÕ÷: ["Ŀ¼", "ÉÏÒ»ÕÂ", "ÏÂÒ»ÕÂ", "ÊéÇ©", "ÉèÖÃ", "Ò¹¼ä", "ÁÁ¶È", "×ÖÌå"],

  59.     // ====== ģʽ ======
  60.     ÓÅÏÈʹÓÃAgentģʽ: true,
  61.     µ÷ÊÔģʽ: true,

  62.     // ====== App±í£¨Ìí¼ÓÐÂAppÖ»ÐèÔÚÕâÀï¼ÓÒ»ÐУ© ======
  63.     App±í: [
  64.         {
  65.             ±àºÅ: 1,
  66.             Ãû³Æ: "ÆßèС˵",
  67.             °üÃû: "com.kmxs.reader",
  68.             ·­Ò³·½Ïò: "horizontal",      // horizontal=×óÓÒ·­Ò³(С˵), vertical=ÉÏÏ»¬¶¯(ÊÓÆµ)
  69.             ·­Ò³ÆðµãX: 0.80,              // ˮƽ·­Ò³: ´ÓÓÒ²àÍù×ó»¬ (ÆðµãX) ÆßèÔĶÁÇø0~1.0
  70.             ·­Ò³ÆðµãY: 0.45,              // ·­Ò³ÆðµãY ±Ü¿ª¶¥²¿²Ëµ¥ºÍµ×²¿½ø¶ÈÌõ
  71.             ·­Ò³ÖÕµãX: 0.20,              // ˮƽ·­Ò³: ÖÕµãX
  72.             ·­Ò³ÖÕµãY: 0.45,              // ·­Ò³ÖÕµãY
  73.             ¸£ÀûÒ³×ø±ê: [0.5, 0.976],      // µ×²¿"¸£Àû"Tab (ʵ²âXML: centerPercent=[0.5,0.9766])
  74.             ¹ã¸æ°´Å¥ÎÄ×Ö: "¿´ÊÓÆµÁì½ð±Ò",    // ¿´¹ã¸æ°´Å¥ÉϵÄÎÄ×Ö
  75.             Æô¶¯ºóµÈ´ýÃë: 8,
  76.             ÔĶÁÒ³¼ì²âÎÄ×Ö: "Ŀ¼",          // ÔÚÔĶÁÒ³ÄÜ¿´µ½µÄÎÄ×Ö(ÅжÏÊÇ·ñÔÚÔĶÁ½çÃæ)
  77.             ÐèÒªÕÒÊé: true,                 // ÆßèÊé¼Ü¿ÉÄÜΪ¿Õ£¬ÐèҪȥÊé³ÇÕÒÊé
  78.             Êé³ÇTab×ø±ê: [0.306, 0.976],    // µ×²¿"Êé³Ç"Tab (ʵ²âXML: centerPercent=[0.3056,0.9766])
  79.             Êé¼ÜTab×ø±ê: [0.111, 0.976],    // µ×²¿"Êé¼Ü"Tab (ʵ²âXML: centerPercent=[0.1111,0.9766])
  80.             µã»÷ÖÐÑëºô³ö²Ëµ¥: false           // ÆßèÔĶÁÒ³²Ëµ¥Êdz£×¤µÄ£¬²»ÐèÒªµãÖÐÑëºô³ö/Òþ²Ø
  81.         },
  82.         {
  83.             ±àºÅ: 2,
  84.             Ãû³Æ: "·¬ÇÑÃâ·ÑС˵",
  85.             °üÃû: "com.dragon.read",
  86.             ·­Ò³·½Ïò: "horizontal",
  87.             ·­Ò³ÆðµãX: 0.75,
  88.             ·­Ò³ÆðµãY: 0.50,
  89.             ·­Ò³ÖÕµãX: 0.25,
  90.             ·­Ò³ÖÕµãY: 0.50,
  91.             ¸£ÀûÒ³×ø±ê: [0.5, 0.976],
  92.             ¹ã¸æ°´Å¥ÎÄ×Ö: "¿´ÊÓÆµÁì½ð±Ò",
  93.             Æô¶¯ºóµÈ´ýÃë: 8,
  94.             ÔĶÁÒ³¼ì²âÎÄ×Ö: "Ŀ¼",
  95.             ÐèÒªÕÒÊé: true,
  96.             Êé³ÇTab×ø±ê: [0.3, 0.976],
  97.             Êé¼ÜTab×ø±ê: [0.1, 0.976],
  98.             µã»÷ÖÐÑëºô³ö²Ëµ¥: false
  99.         },
  100.         {
  101.             ±àºÅ: 3,
  102.             Ãû³Æ: "¿ìÒô",
  103.             °üÃû: "com.kuaiyin.x",
  104.             ·­Ò³·½Ïò: "vertical",          // ÉÏÏ»¬¶¯(¶ÌÊÓÆµÀà)
  105.             ·­Ò³ÆðµãX: 0.35,                // ×ó²à»¬¶¯±Ü¿ªÈ«ÆÁ°´Å¥
  106.             ·­Ò³ÆðµãY: 0.78,
  107.             ·­Ò³ÖÕµãX: 0.35,
  108.             ·­Ò³ÖÕµãY: 0.22,
  109.             ¸£ÀûÒ³×ø±ê: [0.5, 0.976],
  110.             ¹ã¸æ°´Å¥ÎÄ×Ö: "¿´ÊÓÆµÁì½ð±Ò",
  111.             Æô¶¯ºóµÈ´ýÃë: 8,
  112.             ÔĶÁÒ³¼ì²âÎÄ×Ö: null,             // ¶ÌÊÓÆµÀ಻ÐèÒª¼ì²âÔĶÁÒ³
  113.             ÐèÒªÕÒÊé: false,
  114.             Êé³ÇTab×ø±ê: null,
  115.             Êé¼ÜTab×ø±ê: null,
  116.             µã»÷ÖÐÑëºô³ö²Ëµ¥: false
  117.         },
  118.         {
  119.             ±àºÅ: 4,
  120.             Ãû³Æ: "¶¶Òô¼«ËÙ°æ",
  121.             °üÃû: "com.ss.android.ugc.aweme.lite",
  122.             ·­Ò³·½Ïò: "vertical",
  123.             ·­Ò³ÆðµãX: 0.35,
  124.             ·­Ò³ÆðµãY: 0.78,
  125.             ·­Ò³ÖÕµãX: 0.35,
  126.             ·­Ò³ÖÕµãY: 0.22,
  127.             ¸£ÀûÒ³×ø±ê: [0.9, 0.5],          // ÓÒ²àºì°ü¹Ò¼þ
  128.             ¹ã¸æ°´Å¥ÎÄ×Ö: "¿´ÊÓÆµ×¬½ð±Ò",
  129.             Æô¶¯ºóµÈ´ýÃë: 8,
  130.             ÔĶÁÒ³¼ì²âÎÄ×Ö: null,
  131.             ÐèÒªÕÒÊé: false,
  132.             Êé³ÇTab×ø±ê: null,
  133.             Êé¼ÜTab×ø±ê: null,
  134.             µã»÷ÖÐÑëºô³ö²Ëµ¥: false
  135.         }
  136.     ]
  137. };

  138. // =============================================================================
  139. //  µÚ¶þ²¿·Ö£ºÒýÇæ£¨Agent / ÎÞ°­ ˫ģʽ×Ô¶¯Çл»£©
  140. // =============================================================================

  141. var Engine = {
  142.     mode: "",
  143.     ÆÁÄ»¿í: 1080,
  144.     ÆÁÄ»¸ß: 2400,

  145.     init: function() {
  146.         print.log("\n¡¾ÒýÇæ³õʼ»¯¡¿¼ì²âģʽ...");
  147.         if (CONFIG.ÓÅÏÈʹÓÃAgentģʽ) {
  148.             try { if (agent.isOpen()) { this.mode = "agent"; print.log("✓ Agent´úÀíģʽ"); } } catch(e) {}
  149.         }
  150.         if (this.mode === "") {
  151.             try { if (typeof auto !== 'undefined') { this.mode = "auto"; print.log("✓ ÎÞ°­(Accessibility)ģʽ"); } } catch(e) {}
  152.         }
  153.         if (this.mode === "") {
  154.             print.log("✗ Á½¸öģʽ¶¼²»¿ÉÓã¡Ç뿪Æô Agent »òÎÞÕϰ­ºóÔÙÅÜ");
  155.             return false;
  156.         }

  157.         try {
  158.             if (this.mode === "agent") {
  159.                 var raw = "" + agent.shell("wm size");
  160.                 var m = raw.match(/(\d+)x(\d+)/);
  161.                 this.ÆÁÄ»¿í = m ? parseInt(m[1]) : 1080;
  162.                 this.ÆÁÄ»¸ß = m ? parseInt(m[2]) : 2400;
  163.             } else {
  164.                 this.ÆÁÄ»¿í = screen.getScreenWidth();
  165.                 this.ÆÁÄ»¸ß = screen.getScreenHeight();
  166.             }
  167.         } catch(e) {
  168.             this.ÆÁÄ»¿í = 1080;
  169.             this.ÆÁÄ»¸ß = 2400;
  170.         }
  171.         print.log("✓ ÆÁÄ»³ß´ç£º" + this.ÆÁÄ»¿í + " ¡Á " + this.ÆÁÄ»¸ß);
  172.         return true;
  173.     },

  174.     // Ëæ»úÕûÊý [min, max)
  175.     randInt: function(min, max) {
  176.         return Math.floor(min + Math.random() * (max - min));
  177.     },

  178.     // Ëæ»ú¸¡µã [0, 1)
  179.     randFloat: function() {
  180.         return Math.random();
  181.     },

  182.     // Ëæ»úÆ«ÒÆ£¨ÔÚ»ù×¼ÖµÉϼÓÎ¢Ð¡Ëæ»úÁ¿£©
  183.     jitter: function(base, range) {
  184.         return base + (Math.random() - 0.5) * range;
  185.     },

  186.     // ·­Ò³»¬¶¯£¨ºËÐÄ·À¼ì²â£ºËæ»ú¹ì¼£ + Ëæ»úËÙ¶È + Ëæ»úÆ«ÒÆ£©
  187.     nextPage: function(app) {
  188.         var x1, y1, x2, y2;
  189.         var dur = this.randInt(CONFIG.»¬¶¯Ê±³¤×îСºÁÃë, CONFIG.»¬¶¯Ê±³¤×î´óºÁÃë);

  190.         if (app.·­Ò³·½Ïò === "horizontal") {
  191.             // ˮƽ·­Ò³£º´ÓÓÒÍù×󻬣¨ÏÂÒ»Ò³£©
  192.             x1 = this.jitter(app.·­Ò³ÆðµãX, 0.04);
  193.             y1 = this.jitter(app.·­Ò³ÆðµãY, 0.08);
  194.             x2 = this.jitter(app.·­Ò³ÖÕµãX, 0.04);
  195.             y2 = this.jitter(app.·­Ò³ÖÕµãY, 0.08);
  196.         } else {
  197.             // ´¹Ö±·­Ò³£º´ÓÏÂÍùÉÏ»¬£¨ÏÂÒ»¸öÊÓÆµ£©
  198.             x1 = this.jitter(app.·­Ò³ÆðµãX, 0.06);
  199.             y1 = this.jitter(app.·­Ò³ÆðµãY, 0.04);
  200.             x2 = this.jitter(app.·­Ò³ÖÕµãX, 0.06);
  201.             y2 = this.jitter(app.·­Ò³ÖÕµãY, 0.04);
  202.         }

  203.         // È·±£×ø±êÔںϷ¨·¶Î§ [0.02, 0.98]
  204.         x1 = Math.max(0.02, Math.min(0.98, x1));
  205.         y1 = Math.max(0.02, Math.min(0.98, y1));
  206.         x2 = Math.max(0.02, Math.min(0.98, x2));
  207.         y2 = Math.max(0.02, Math.min(0.98, y2));

  208.         if (CONFIG.µ÷ÊÔģʽ) {
  209.             print.log("  ¡ú ·­Ò³ [" + app.·­Ò³·½Ïò + "] (" +
  210.                 x1.toFixed(2) + "," + y1.toFixed(2) + ") ¡ú (" +
  211.                 x2.toFixed(2) + "," + y2.toFixed(2) + ") " + dur + "ms");
  212.         }

  213.         try {
  214.             auto.swipPercent_v2(x1, y1, x2, y2, dur, 0);
  215.         } catch(e) {
  216.             // ¶µµ×£ºÓà agent.shell input swipe
  217.             try {
  218.                 var px1 = Math.floor(this.ÆÁÄ»¿í * x1);
  219.                 var py1 = Math.floor(this.ÆÁÄ»¸ß * y1);
  220.                 var px2 = Math.floor(this.ÆÁÄ»¿í * x2);
  221.                 var py2 = Math.floor(this.ÆÁÄ»¸ß * y2);
  222.                 agent.shell("input swipe " + px1 + " " + py1 + " " + px2 + " " + py2 + " " + dur);
  223.             } catch(e2) {
  224.                 print.log("  ⚠ ·­Ò³Ê§°Ü: " + e2.message);
  225.             }
  226.         }
  227.         sleep.millisecond(this.randInt(300, 600));

  228.         // С˵ÀàApp·­Ò³ºó¿ÉÄܵ¯³ö¹ã¸æ/µ¯´°£¬¹Ø±ÕËü
  229.         if (app.µã»÷ÖÐÑëºô³ö²Ëµ¥) {
  230.             // ²»ÔÙµãÖÐÑëÒþ²Ø²Ëµ¥¡ª¡ªÆßèÔĶÁÒ³²Ëµ¥Êdz£×¤µÄ£¨ÉÏÒ»ÕÂ/ÏÂÒ»ÕÂ/Ŀ¼Ôڵײ¿£©
  231.             // Ö»¹Ø±Õ¿ÉÄܵ¯³öµÄ¹ã¸æµ¯´°
  232.             this.closePopup();
  233.         }
  234.     },

  235.     // »Ø·­£¨Ä£ÄâÕæÈË»ØÍ·¿´Ò»ÏÂÉÏÒ»Ò³£©
  236.     backPage: function(app) {
  237.         print.log("  ↩ »Ø·­Ò»Ò³£¨Ä£ÄâÕæÈË»ØÍ·£©");
  238.         var x1, y1, x2, y2;

  239.         if (app.·­Ò³·½Ïò === "horizontal") {
  240.             // ˮƽ»Ø·­£º´Ó×óÍùÓÒ»¬£¨ÉÏÒ»Ò³£©
  241.             x1 = this.jitter(app.·­Ò³ÖÕµãX, 0.04);
  242.             y1 = this.jitter(app.·­Ò³ÆðµãY, 0.08);
  243.             x2 = this.jitter(app.·­Ò³ÆðµãX, 0.04);
  244.             y2 = this.jitter(app.·­Ò³ÖÕµãY, 0.08);
  245.         } else {
  246.             // ´¹Ö±»Ø·­£º´ÓÉÏÍùÏ»¬£¨ÉÏÒ»¸öÊÓÆµ£©
  247.             x1 = this.jitter(app.·­Ò³ÖÕµãX, 0.06);
  248.             y1 = this.jitter(app.·­Ò³ÖÕµãY, 0.04);
  249.             x2 = this.jitter(app.·­Ò³ÆðµãX, 0.06);
  250.             y2 = this.jitter(app.·­Ò³ÆðµãY, 0.04);
  251.         }

  252.         try {
  253.             auto.swipPercent_v2(x1, y1, x2, y2, this.randInt(400, 800), 0);
  254.         } catch(e) {
  255.             try {
  256.                 var px1 = Math.floor(this.ÆÁÄ»¿í * x1);
  257.                 var py1 = Math.floor(this.ÆÁÄ»¸ß * y1);
  258.                 var px2 = Math.floor(this.ÆÁÄ»¿í * x2);
  259.                 var py2 = Math.floor(this.ÆÁÄ»¸ß * y2);
  260.                 agent.shell("input swipe " + px1 + " " + py1 + " " + px2 + " " + py2 + " 600");
  261.             } catch(e2) {}
  262.         }
  263.         sleep.millisecond(this.randInt(500, 1000));
  264.     },

  265.     // Ë«»÷µãÔÞ£¨Ä£ÄâÕæÈËË«»÷ÆÁÄ»µãÔÞ£©
  266.     doubleTap: function() {
  267.         print.log("  ❤ Ë«»÷µãÔÞ");
  268.         var x = this.jitter(0.5, 0.1);
  269.         var y = this.jitter(0.4, 0.1);
  270.         try {
  271.             auto.clickPercent(x, y);
  272.             sleep.millisecond(80);
  273.             auto.clickPercent(x, y);
  274.         } catch(e) {
  275.             try {
  276.                 var px = Math.floor(this.ÆÁÄ»¿í * x);
  277.                 var py = Math.floor(this.ÆÁÄ»¸ß * y);
  278.                 agent.shell("input tap " + px + " " + py);
  279.                 sleep.millisecond(80);
  280.                 agent.shell("input tap " + px + " " + py);
  281.             } catch(e2) {}
  282.         }
  283.         sleep.millisecond(this.randInt(300, 600));
  284.     },

  285.     // µã»÷°Ù·Ö±È×ø±ê
  286.     clickPercent: function(px, py) {
  287.         try {
  288.             auto.clickPercent(px, py);
  289.         } catch(e) {
  290.             try {
  291.                 agent.shell("input tap " + Math.floor(this.ÆÁÄ»¿í * px) + " " + Math.floor(this.ÆÁÄ»¸ß * py));
  292.             } catch(e2) {}
  293.         }
  294.         sleep.millisecond(this.randInt(600, 1000));
  295.     },

  296.     // ·µ»Ø¼ü
  297.     back: function() {
  298.         try {
  299.             if (this.mode === "agent") agent.shell("input keyevent 4");
  300.             else auto.back();
  301.         } catch(e) {}
  302.         sleep.second(1);
  303.     },

  304.     // Home¼ü
  305.     home: function() {
  306.         try {
  307.             if (this.mode === "agent") agent.shell("input keyevent 3");
  308.             else auto.home();
  309.         } catch(e) {}
  310.         sleep.second(2);
  311.     },

  312.     // Æô¶¯ App
  313.     openApp: function(pkg, name) {
  314.         print.log("  ¡ú Æô¶¯£º" + name + "£¨" + pkg + "£©");
  315.         try {
  316.             app.resetApp(pkg);
  317.             print.log("✓ Æô¶¯APP£º" + pkg);
  318.             return true;
  319.         } catch(e) {
  320.             print.log("  ⚠ app.resetApp ʧ°Ü£º" + e.message + "£¬³¢ÊÔ monkey ¶µµ×");
  321.             try {
  322.                 agent.shell("monkey -p " + pkg + " -c android.intent.category.LAUNCHER 1");
  323.                 return true;
  324.             } catch(e2) {
  325.                 print.log("  ✗ Æô¶¯Íêȫʧ°Ü£º" + e2.message);
  326.                 return false;
  327.             }
  328.         }
  329.     },

  330.     // ¹Ø±Õµ¯´°£¨È«Óà nodeSearch£¬²»ÒÀÀµ findText£©
  331.     closePopup: function() {
  332.         var words = CONFIG.µ¯´°¹Ø¼ü´Ê;
  333.         try {
  334.             var nodes = auto.nodeSearch(1000);
  335.             if (!nodes) return false;

  336.             // µÚÒ»ÂÖ£º¾«È·Æ¥Å乨¼ü´Ê
  337.             for (var i = 0; i < words.length; i++) {
  338.                 try {
  339.                     var filtered = nodes.text(words[i]);
  340.                     if (filtered && filtered.count() > 0) {
  341.                         var node = filtered.getNode(0);
  342.                         if (node && this.clickNode(node, words[i], "µ¯´°")) {
  343.                             return true;
  344.                         }
  345.                     }
  346.                 } catch(e2) {}
  347.             }

  348.             // µÚ¶þÂÖ£ºÄ£ºýÆ¥Å乨¼ü´Ê
  349.             for (var j = 0; j < words.length; j++) {
  350.                 try {
  351.                     var inc = nodes.textIncludes(words[j]);
  352.                     if (inc && inc.count() > 0) {
  353.                         var node2 = inc.getNode(0);
  354.                         if (node2 && this.clickNode(node2, words[j], "Ä£ºýµ¯´°")) {
  355.                             return true;
  356.                         }
  357.                     }
  358.                 } catch(e3) {}
  359.             }

  360.             // µÚÈýÂÖ£º¹Ø±ÕÐü¸¡¹ã¸æ/ºì°ü£¨Í¨¹ý½ÚµãID£¬´ø°üÃûǰ׺£©
  361.             var pkg = "";
  362.             try { pkg = app.getTopPackName() || ""; } catch(e5) {}
  363.             var closeIds = [
  364.                 (pkg ? pkg + ":id/" : "") + "close_red_packet",
  365.                 (pkg ? pkg + ":id/" : "") + "close",
  366.                 (pkg ? pkg + ":id/" : "") + "iv_close",
  367.                 (pkg ? pkg + ":id/" : "") + "btn_close",
  368.                 (pkg ? pkg + ":id/" : "") + "img_close",
  369.                 "close_red_packet", "close", "iv_close", "btn_close", "img_close"
  370.             ];
  371.             for (var k = 0; k < closeIds.length; k++) {
  372.                 try {
  373.                     var idNode = nodes.id(closeIds[k]);
  374.                     if (idNode && idNode.count() > 0) {
  375.                         var node3 = idNode.getNode(0);
  376.                         if (node3 && this.clickNode(node3, closeIds[k], "¸¡´°ID")) {
  377.                             return true;
  378.                         }
  379.                     }
  380.                 } catch(e4) {}
  381.             }

  382.         } catch(e) {
  383.             if (CONFIG.µ÷ÊÔģʽ) print.log("  - µ¯´°¼ì²âÒì³£: " + e.message);
  384.         }
  385.         return false;
  386.     },

  387.     // ²éÕÒ²¢µã»÷ÎÄ×Ö£¨¾«È·¡úÄ£ºý¡údescÆ¥Å䣬ÿ¸ö¶¼ÏÈnode.clickÔÙ×ø±êfallback£©
  388.     findAndClickText: function(keyword) {
  389.         try {
  390.             var nodes = auto.nodeSearch(2000);
  391.             if (!nodes) return false;

  392.             // 1. ¾«È·Æ¥Åä text
  393.             try {
  394.                 var filtered = nodes.text(keyword);
  395.                 if (filtered && filtered.count() > 0) {
  396.                     var node = filtered.getNode(0);
  397.                     if (node && this.clickNode(node, keyword)) return true;
  398.                 }
  399.             } catch(e1) {}

  400.             // 2. Ä£ºýÆ¥Åä textIncludes
  401.             try {
  402.                 var inc = nodes.textIncludes(keyword);
  403.                 if (inc && inc.count() > 0) {
  404.                     var node2 = inc.getNode(0);
  405.                     if (node2 && this.clickNode(node2, keyword)) return true;
  406.                 }
  407.             } catch(e2) {}

  408.             // 3. desc ¾«È·Æ¥Åä
  409.             try {
  410.                 var descNode = nodes.desc(keyword);
  411.                 if (descNode && descNode.count() > 0) {
  412.                     var node3 = descNode.getNode(0);
  413.                     if (node3 && this.clickNode(node3, keyword, "desc")) return true;
  414.                 }
  415.             } catch(e3) {}

  416.             // 4. descIncludes Ä£ºýÆ¥Åä
  417.             try {
  418.                 var descInc = nodes.descIncludes(keyword);
  419.                 if (descInc && descInc.count() > 0) {
  420.                     var node4 = descInc.getNode(0);
  421.                     if (node4 && this.clickNode(node4, keyword, "descÄ£ºý")) return true;
  422.                 }
  423.             } catch(e4) {}
  424.         } catch(e) {
  425.             if (CONFIG.µ÷ÊÔģʽ) print.log("  - findAndClickText Òì³£: " + e.message);
  426.         }
  427.         return false;
  428.     },

  429.     // µã»÷½Úµã£¨Ïȳ¢ÊÔnode.click()£¬Ê§°ÜÔòÓÃ×ø±êµã»÷£©
  430.     // AIWROK½Úµã¶ÔÏóµÄ text/centerPercent/center ¶¼ÊÇÊôÐÔ²»ÊÇ·½·¨£¬ÓÃnode.xxx²»ÊÇnode.xxx()
  431.     clickNode: function(node, label, matchType) {
  432.         matchType = matchType || "text";
  433.         try {
  434.             // Ïȳ¢ÊÔ node.click()
  435.             node.click();
  436.             print.log("  ✓ µã»÷" + matchType + "¡¾" + label + "¡¿(node.click)");
  437.             sleep.second(1);
  438.             return true;
  439.         } catch(e) {
  440.             // node.click() ʧ°Ü£¬ÓÃ×ø±êµã»÷
  441.             try {
  442.                 // »ñÈ¡½ÚµãµÄ centerPercent ÊôÐÔ£¨×¢Ò⣺ÊÇÊôÐÔ²»ÊÇ·½·¨£©
  443.                 var cp = null;
  444.                 try { cp = node.centerPercent; } catch(e3) {}
  445.                 if (cp) {
  446.                     // centerPercent ¸ñʽ "[0.5,0.85]"
  447.                     var m = ("" + cp).match(/([\d.]+),([\d.]+)/);
  448.                     if (m) {
  449.                         var px = parseFloat(m[1]);
  450.                         var py = parseFloat(m[2]);
  451.                         this.clickPercent(px, py);
  452.                         print.log("  ✓ ×ø±êµã»÷" + matchType + "¡¾" + label + "¡¿(" + px + "," + py + ")");
  453.                         return true;
  454.                     }
  455.                 }
  456.                 // ¶µµ×£ºÓà center ÊôÐÔ
  457.                 var ct = null;
  458.                 try { ct = node.center; } catch(e4) {}
  459.                 if (ct) {
  460.                     var m2 = ("" + ct).match(/([\d.]+),([\d.]+)/);
  461.                     if (m2) {
  462.                         var cx = parseInt(m2[1]);
  463.                         var cy = parseInt(m2[2]);
  464.                         var px2 = cx / this.ÆÁÄ»¿í;
  465.                         var py2 = cy / this.ÆÁÄ»¸ß;
  466.                         this.clickPercent(px2, py2);
  467.                         print.log("  ✓ ×ø±êµã»÷" + matchType + "¡¾" + label + "¡¿(" + px2 + "," + py2 + ")");
  468.                         return true;
  469.                     }
  470.                 }
  471.                 // ¶µµ×2£ºÓà boundsPercent ÊôÐÔ
  472.                 var bp = null;
  473.                 try { bp = node.boundsPercent; } catch(e5) {}
  474.                 if (bp) {
  475.                     // boundsPercent ¸ñʽ "[0.1,0.2][0.5,0.8]" È¡ÖÐÐÄ
  476.                     var m3 = ("" + bp).match(/\[([\d.]+),([\d.]+)\]\[([\d.]+),([\d.]+)\]/);
  477.                     if (m3) {
  478.                         var px3 = (parseFloat(m3[1]) + parseFloat(m3[3])) / 2;
  479.                         var py3 = (parseFloat(m3[2]) + parseFloat(m3[4])) / 2;
  480.                         this.clickPercent(px3, py3);
  481.                         print.log("  ✓ ×ø±êµã»÷" + matchType + "¡¾" + label + "¡¿(" + px3 + "," + py3 + ")");
  482.                         return true;
  483.                     }
  484.                 }
  485.             } catch(e2) {
  486.                 if (CONFIG.µ÷ÊÔģʽ) print.log("  - clickNode×ø±êfallbackҲʧ°Ü: " + e2.message);
  487.             }
  488.         }
  489.         return false;
  490.     },

  491.     // Åжϵ±Ç°ÊÇ·ñÔÚÔĶÁÒ³/ÊÓÆµÒ³
  492.     // ÓÅÏÈÓÃÔĶÁÒ³ÌØÓеÄID¼ì²â£¨×î׼ȷ£©£¬ÎÄ×ÖÌØÕ÷Ö»×÷Ϊ¸¨Öú
  493.     isOnReadingPage: function(app) {
  494.         if (!app.ÔĶÁÒ³¼ì²âÎÄ×Ö) return true; // ²»ÐèÒª¼ì²âµÄÖ±½Ó·µ»Øtrue
  495.         try {
  496.             var nodes = auto.nodeSearch(1500);
  497.             if (!nodes) return true; // nodeSearchʧ°Üʱ²»×è¶ÏÁ÷³Ì

  498.             // 1. ÓÅÏȼì²âÔĶÁÒ³ÌØÓеÄID£¨×î׼ȷ£¬²»»áÎóÅУ©
  499.             try {
  500.                 var pkg = app.°üÃû;
  501.                 var ids = [
  502.                     pkg + ":id/read_progress_layout",
  503.                     pkg + ":id/book_directory",
  504.                     pkg + ":id/btn_progress_left",
  505.                     pkg + ":id/btn_progress_right",
  506.                     pkg + ":id/read_blank_area",
  507.                     pkg + ":id/read_page_container",
  508.                     pkg + ":id/read_view",
  509.                     pkg + ":id/tv_read_progress"
  510.                 ];
  511.                 for (var j = 0; j < ids.length; j++) {
  512.                     var idNode = nodes.id(ids[j]);
  513.                     if (idNode && idNode.count() > 0) return true;
  514.                 }
  515.             } catch(e3) {}

  516.             // 2. ÔÙÓÃÎÄ×ÖÌØÕ÷¸¨ÖúÅжϣ¨×¢Ò⣺ҪͬʱÂú×ã¶à¸öÌØÕ÷²ÅË㣬±ÜÃâÎóÅУ©
  517.             var matchCount = 0;
  518.             var features = CONFIG.ÔĶÁÒ³ÌØÕ÷;
  519.             for (var i = 0; i < features.length; i++) {
  520.                 try {
  521.                     var matched = nodes.text(features[i]);
  522.                     if (matched && matched.count() > 0) {
  523.                         matchCount++;
  524.                         // ÖÁÉÙÆ¥Åä2¸öÔĶÁÒ³ÌØÕ÷ÎÄ×Ö²ÅÈ϶¨£¨¼õÉÙÎóÅУ©
  525.                         if (matchCount >= 2) return true;
  526.                     }
  527.                 } catch(e) {}
  528.             }

  529.             // 3. ¼ì²âÖ÷¼ì²âÎÄ×Ö + ÖÁÉÙ1¸öÆäËûÌØÕ÷
  530.             try {
  531.                 var main = nodes.text(app.ÔĶÁÒ³¼ì²âÎÄ×Ö);
  532.                 if (main && main.count() > 0 && matchCount >= 1) return true;
  533.             } catch(e2) {}

  534.             return false;
  535.         } catch(e) {
  536.             return true; // ¼ì²âʧ°Üʱ¼ÙÉèÔÚÔĶÁÒ³£¨²»ÖжÏÁ÷³Ì£©
  537.         }
  538.     },

  539.     // µÈ´ýÒ»¶Îʱ¼ä£¬ÆÚ¼äÖÜÆÚÐԹرյ¯´°
  540.     smartSleep: function(totalSec, intervalSec) {
  541.         var remain = totalSec;
  542.         while (remain > 0) {
  543.             var step = Math.min(intervalSec, remain);
  544.             sleep.second(step);
  545.             remain -= step;
  546.             this.closePopup();
  547.         }
  548.     }
  549. };

  550. // =============================================================================
  551. //  µÚÈý²¿·Ö£ºÔĶÁ׬ǮºËÐÄÄ£¿é
  552. // =============================================================================

  553. var ReadingBot = {
  554.     app: null,
  555.     totalReads: 0,           // ×Ü·­Ò³´ÎÊý
  556.     totalAds: 0,             // ¿´¹ã¸æ´ÎÊý
  557.     totalPopups: 0,          // ¹Øµ¯´°´ÎÊý
  558.     totalBackReads: 0,       // »Ø·­´ÎÊý
  559.     totalLikes: 0,           // µãÔÞ´ÎÊý
  560.     totalRests: 0,           // ÐÝÏ¢´ÎÊý
  561.     startTime: 0,
  562.     lastAdTime: 0,           // Éϴο´¹ã¸æµÄʱ¼ä´Á

  563.     run: function(app) {
  564.         this.app = app;
  565.         this.startTime = Date.now();
  566.         this.lastAdTime = this.startTime;

  567.         var maxMs = CONFIG.×ÜÔËÐзÖÖÓ * 60 * 1000;

  568.         print.log("\n¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T ¿ªÊ¼ÔĶÁ׬Ǯ ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
  569.         print.log("  ¡¤ App£º" + app.Ãû³Æ + "£¨" + app.°üÃû + "£©");
  570.         print.log("  ¡¤ ·­Ò³·½Ïò£º" + app.·­Ò³·½Ïò);
  571.         print.log("  ¡¤ ×Üʱ³¤£º" + CONFIG.×ÜÔËÐзÖÖÓ + " ·ÖÖÓ");
  572.         print.log("  ¡¤ Í£Áô£º" + CONFIG.×îСͣÁôÃë + "~" + CONFIG.×î´óÍ£ÁôÃë + " Ãë");
  573.         print.log("  ¡¤ ¿´¹ã¸æ¼ä¸ô£º" + CONFIG.¿´¹ã¸æ¼ä¸ô·ÖÖÓ + " ·ÖÖÓ");
  574.         print.log("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a");

  575.         // 1. Æô¶¯App
  576.         print.log("\n[²½Öè1] Æô¶¯App...");
  577.         if (!Engine.openApp(app.°üÃû, app.Ãû³Æ)) {
  578.             print.log("✗ Æô¶¯Ê§°Ü£¬Í˳ö");
  579.             return;
  580.         }
  581.         sleep.second(app.Æô¶¯ºóµÈ´ýÃë || 8);
  582.         Engine.closePopup();

  583.         // 2. È·±£ÔÚÔĶÁÒ³/ÊÓÆµÒ³
  584.         print.log("[²½Öè2] È·ÈÏÔĶÁÒ³Ãæ...");

  585.         if (app.ÐèÒªÕÒÊé && !Engine.isOnReadingPage(app)) {
  586.             // Êé¼Ü¿ÉÄÜΪ¿Õ»ò²»ÔÚÔĶÁÒ³£¬ÐèÒªÕÒÒ»±¾Êé
  587.             print.log("  ¡ú ²»ÔÚÔĶÁÒ³£¬ÐèÒªÕÒÒ»±¾Êé½øÈëÔĶÁ...");
  588.             this.findBookAndRead(app);
  589.         } else if (!Engine.isOnReadingPage(app)) {
  590.             // ²»ÐèÒªÕÒÊéµÄApp£¨Èç¶ÌÊÓÆµ£©£¬µãÖÐÑë½øÈë
  591.             print.log("  ⚠ ²»ÔÚÔĶÁÒ³£¬³¢ÊÔµã»÷ÆÁÄ»ÖÐÑë½øÈë...");
  592.             Engine.clickPercent(0.5, 0.5);
  593.             sleep.second(2);
  594.             Engine.closePopup();
  595.         }

  596.         if (Engine.isOnReadingPage(app)) {
  597.             print.log("✓ ÒѽøÈëÔĶÁÒ³Ãæ");
  598.         } else {
  599.             print.log("⚠ δȷÈÏÔÚÔĶÁÒ³£¬µ«ÈÔ¼ÌÐø³¢ÊÔ·­Ò³...");
  600.         }

  601.         // 3. Ö÷Ñ­»·
  602.         print.log("\n[²½Öè3] ¿ªÊ¼×Ô¶¯·­Ò³ÔĶÁ...\n");

  603.         while ((Date.now() - this.startTime) < maxMs) {
  604.             var elapsedMin = ((Date.now() - this.startTime) / 60000).toFixed(1);
  605.             var remainMin = (CONFIG.×ÜÔËÐзÖÖÓ - elapsedMin).toFixed(1);

  606.             // === A. ¼ì²éÊÇ·ñ¸ÃÐÝÏ¢ÁË ===
  607.             if (CONFIG.ÿ¸ôN·ÖÖÓÐÝÏ¢ > 0 &&
  608.                 (Date.now() - this.startTime) > CONFIG.ÿ¸ôN·ÖÖÓ * 60 * 1000 * (this.totalRests + 1)) {
  609.                 this.totalRests++;
  610.                 var restSec = Engine.randInt(CONFIG.ÐÝÏ¢ÃëÊý, CONFIG.ÐÝÏ¢ÃëÊý + 20);
  611.                 print.log("\n[" + elapsedMin + "m] ☕ µÚ" + this.totalRests + "´ÎÐÝÏ¢ " + restSec + "Ãë");
  612.                 Engine.smartSleep(restSec, 10);
  613.                 print.log("  ✓ ÐÝÏ¢Íê±Ï£¬¼ÌÐøÔĶÁ");
  614.                 continue;
  615.             }

  616.             // === B. ¼ì²éÊÇ·ñ¸Ã¿´¹ã¸æÁË ===
  617.             var sinceAd = Date.now() - this.lastAdTime;
  618.             if (sinceAd >= CONFIG.¿´¹ã¸æ¼ä¸ô·ÖÖÓ * 60 * 1000) {
  619.                 this.watchAd();
  620.                 this.lastAdTime = Date.now();
  621.                 // ¿´Íê¹ã¸æºóÈ·±£»Øµ½ÔĶÁÒ³
  622.                 this.ensureReadingPage();
  623.                 continue;
  624.             }

  625.             // === C. Ëæ»úÍ£Áô¿´µ±Ç°Ò³ ===
  626.             var staySec = Engine.randInt(CONFIG.×îСͣÁôÃë, CONFIG.×î´óÍ£ÁôÃë);

  627.             // С¸ÅÂʶîÍâ¶àÍ£Ò»»á£¨Ä£ÄâÕæÈ˱»ÄÚÈÝÎüÒý£©
  628.             if (Engine.randFloat() < CONFIG.ÐÝÏ¢¸ÅÂÊ) {
  629.                 staySec += Engine.randInt(10, 30);
  630.                 if (CONFIG.µ÷ÊÔģʽ) print.log("  &#128214; Õâ¶ÎÄÚÈݲ»´í£¬¶à¿´ " + (staySec - CONFIG.×îСͣÁôÃë) + " Ãë");
  631.             }

  632.             if (CONFIG.µ÷ÊÔģʽ) {
  633.                 print.log("[" + elapsedMin + "m] µÚ" + (this.totalReads + 1) + "Ò³ Í£Áô" + staySec + "s (Ê£" + remainMin + "m)");
  634.             } else if ((this.totalReads % 10) === 0) {
  635.                 print.log("[" + elapsedMin + "m] ÒÑ·­" + this.totalReads + "Ò³ ¹ã¸æ" + this.totalAds + "´Î µ¯´°" + this.totalPopups + "´Î");
  636.             }

  637.             // Í£ÁôÆÚ¼äÿ5Ãë¹ØÒ»´Îµ¯´°
  638.             Engine.smartSleep(staySec, 5);

  639.             // === D. Ëæ»ú·À¼ì²â¶¯×÷ ===
  640.             var dice = Engine.randFloat();

  641.             if (dice < CONFIG.»Ø·­¸ÅÂÊ) {
  642.                 // С¸ÅÂʻط­Ò»Ò³
  643.                 this.totalBackReads++;
  644.                 Engine.backPage(this.app);
  645.                 sleep.second(Engine.randInt(3, 6));
  646.                 // ÔÙ·­»ØÀ´
  647.                 Engine.nextPage(this.app);
  648.                 this.totalReads++;
  649.             } else if (dice < CONFIG.»Ø·­¸ÅÂÊ + CONFIG.µãÔÞ¸ÅÂÊ) {
  650.                 // С¸ÅÂÊË«»÷µãÔÞ
  651.                 this.totalLikes++;
  652.                 Engine.doubleTap();
  653.             } else {
  654.                 // Õý³£·­Ò³
  655.                 Engine.nextPage(this.app);
  656.                 this.totalReads++;
  657.             }

  658.             // ÿ20Ò³¹ØÒ»´Îµ¯´°
  659.             if ((this.totalReads % 20) === 0) {
  660.                 if (Engine.closePopup()) this.totalPopups++;
  661.             }

  662.             // ÿ50ҳȷ±£ÔÚÔĶÁÒ³
  663.             if ((this.totalReads % 50) === 0) {
  664.                 if (!Engine.isOnReadingPage(this.app)) {
  665.                     print.log("  ⚠ Æ«ÀëÔĶÁÒ³£¬³¢ÊÔ»Ö¸´...");
  666.                     Engine.back();
  667.                     sleep.second(2);
  668.                     if (!Engine.isOnReadingPage(this.app)) {
  669.                         Engine.clickPercent(0.5, 0.5);
  670.                         sleep.second(2);
  671.                     }
  672.                     Engine.closePopup();
  673.                 }
  674.             }
  675.         }

  676.         // 4. ½áÊøÍ³¼Æ
  677.         var totalMin = ((Date.now() - this.startTime) / 60000).toFixed(1);
  678.         print.log("\n¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T ÔĶÁ½áÊø ¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[");
  679.         print.log("¨U  ×Ü·­Ò³£º" + this.totalReads + " ´Î");
  680.         print.log("¨U  »Ø·­´ÎÊý£º" + this.totalBackReads + " ´Î");
  681.         print.log("¨U  µãÔÞ´ÎÊý£º" + this.totalLikes + " ´Î");
  682.         print.log("¨U  ¿´¹ã¸æ£º" + this.totalAds + " ´Î");
  683.         print.log("¨U  ¹Øµ¯´°£º" + this.totalPopups + " ´Î");
  684.         print.log("¨U  ÐÝÏ¢´ÎÊý£º" + this.totalRests + " ´Î");
  685.         print.log("¨U  ×Üʱ³¤£º" + totalMin + " ·ÖÖÓ");
  686.         print.log("¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a");

  687.         Engine.home();
  688.     },

  689.     // ÕÒÒ»±¾Êé½øÈëÔĶÁÒ³Ãæ£¨Æßè/·¬ÇѵÈС˵ÀàAppÓã©
  690.     // »ùÓÚʵ²âXML½Úµã½á¹¹±àд£¬Ö§³ÖÖØÊԺͶà²ßÂÔfallback
  691.     findBookAndRead: function(app) {
  692.         var maxRetry = 4; // ×î¶à³¢ÊÔ4±¾Êé
  693.         var readBtns = ["¿ªÊ¼ÔĶÁ", "Ãâ·ÑÔĶÁ", "Á¢¼´ÔĶÁ", "¼ÌÐøÔĶÁ", "Ãâ·Ñ¶Á", "¿ªÊ¼Ãâ·Ñ¶Á"];
  694.         var addBtns = ["¼ÓÈëÊé¼Ü", "Ìí¼Óµ½Êé¼Ü", "ÊÕ²Ø"];

  695.         for (var retry = 0; retry < maxRetry; retry++) {
  696.             print.log("\n  [ÕÒÊé] === µÚ" + (retry + 1) + "/" + maxRetry + "ÂÖ ===");
  697.             try {
  698.                 // 0. ÒÑÔÚÔĶÁÒ³ÔòÖ±½Ó·µ»Ø
  699.                 if (Engine.isOnReadingPage(app)) {
  700.                     print.log("  [ÕÒÊé] ✓ ÒÑÔÚÔĶÁÒ³£¬ÎÞÐèÕÒÊé");
  701.                     return true;
  702.                 }

  703.                 // 1. È·±£ÔÚÊé³ÇÒ³£¨µãÊé³ÇTab£©
  704.                 if (retry === 0 && app.Êé³ÇTab×ø±ê) {
  705.                     print.log("  [ÕÒÊé] 1. µã»÷Êé³ÇTab...");
  706.                     Engine.clickPercent(app.Êé³ÇTab×ø±ê[0], app.Êé³ÇTab×ø±ê[1]);
  707.                     sleep.second(3);
  708.                     Engine.closePopup();
  709.                 }

  710.                 // 2. µã»÷Ò»±¾Ê飺ÓÅÏÈÓýڵãID£¬¶µµ×ÓÃ×ø±ê
  711.                 var bookClicked = false;
  712.                 var bookTitle = "";

  713.                 // ²ßÂÔA: Óà tv_book_title ½Úµãµã»÷£¨Í¨¹ý×ø±êfallbackÈ·±£µã»÷³É¹¦£©
  714.                 try {
  715.                     var nodes = auto.nodeSearch(2000);
  716.                     if (nodes) {
  717.                         var titleNodes = nodes.id(app.°üÃû + ":id/tv_book_title");
  718.                         if (titleNodes && titleNodes.count() > 0) {
  719.                             var idx = Math.min(retry, titleNodes.count() - 1);
  720.                             var titleNode = titleNodes.getNode(idx);
  721.                             if (titleNode) {
  722.                                 // AIWROK½ÚµãtextÊÇÊôÐÔ²»ÊÇ·½·¨
  723.                                 bookTitle = titleNode.text || ("Êé" + idx);
  724.                                 // tv_book_title ±¾Éí clickable=false£¬Óà clickNode ×ø±êfallback
  725.                                 if (Engine.clickNode(titleNode, bookTitle, "ÊéÃû")) {
  726.                                     print.log("  [ÕÒÊé] 2A. µã»÷ÊéÃû[" + bookTitle + "] idx=" + idx);
  727.                                     bookClicked = true;
  728.                                 }
  729.                             }
  730.                         }
  731.                     }
  732.                 } catch(e2a) {
  733.                     if (CONFIG.µ÷ÊÔģʽ) print.log("  [ÕÒÊé] 2AÒì³£: " + e2a.message);
  734.                 }

  735.                 // ²ßÂÔB: Óà rank_book_cover ½Úµãµã»÷
  736.                 if (!bookClicked) {
  737.                     try {
  738.                         var nodes2 = auto.nodeSearch(2000);
  739.                         if (nodes2) {
  740.                             var coverIds = [
  741.                                 app.°üÃû + ":id/rank_book_cover",
  742.                                 "rank_book_cover",
  743.                                 "book_cover", "iv_cover", "item_book"
  744.                             ];
  745.                             for (var ci = 0; ci < coverIds.length; ci++) {
  746.                                 try {
  747.                                     var coverNodes = nodes2.id(coverIds[ci]);
  748.                                     if (coverNodes && coverNodes.count() > 0) {
  749.                                         var cIdx = Math.min(retry, coverNodes.count() - 1);
  750.                                         var coverNode = coverNodes.getNode(cIdx);
  751.                                         if (coverNode && Engine.clickNode(coverNode, "·âÃæ" + cIdx, "Êé¼®")) {
  752.                                             print.log("  [ÕÒÊé] 2B. µã»÷·âÃæ id=" + coverIds[ci] + " idx=" + cIdx);
  753.                                             bookClicked = true;
  754.                                             break;
  755.                                         }
  756.                                     }
  757.                                 } catch(e2b2) {}
  758.                             }
  759.                         }
  760.                     } catch(e2b) {
  761.                         if (CONFIG.µ÷ÊÔģʽ) print.log("  [ÕÒÊé] 2BÒì³£: " + e2b.message);
  762.                     }
  763.                 }

  764.                 // ²ßÂÔC: ÓÃ×ø±êµã»÷²»Í¬µÄÊé
  765.                 // XMLʵ²â: µÚ1±¾Êé center=[0.1287,0.3932], µÚ5±¾Êé center=[0.7148,0.3932]
  766.                 // ´¹Ö±·½Ïò¼ä¸ôÔ¼0.1187 (0.3932¡ú0.512¡ú0.6307¡ú0.7495)
  767.                 if (!bookClicked) {
  768.                     var bookPositions = [
  769.                         [0.13, 0.39], [0.13, 0.51], [0.13, 0.63], [0.13, 0.75],
  770.                         [0.71, 0.39], [0.71, 0.51], [0.71, 0.63], [0.71, 0.75]
  771.                     ];
  772.                     var posIdx = retry % bookPositions.length;
  773.                     print.log("  [ÕÒÊé] 2C. ×ø±êµã»÷ÍÆ¼öÊé (" + bookPositions[posIdx][0] + "," + bookPositions[posIdx][1] + ")");
  774.                     Engine.clickPercent(bookPositions[posIdx][0], bookPositions[posIdx][1]);
  775.                     bookClicked = true;
  776.                 }

  777.                 if (!bookClicked) {
  778.                     print.log("  [ÕÒÊé] ⚠ ÎÞ·¨ÕÒµ½¿Éµã»÷µÄÊé¼®£¬ÖØÊÔ...");
  779.                     sleep.second(2);
  780.                     continue;
  781.                 }

  782.                 // 3. µÈ´ýÒ³ÃæÌø×ª£¬È»ºó¹Ø±Õµ¯´°
  783.                 sleep.second(3);
  784.                 Engine.closePopup();

  785.                 // 4. ¼ì²éÊÇ·ñÖ±½Ó½øÈëÁËÔĶÁÒ³£¨ÓÐЩApp»áÖ±½Ó´ò¿ª£©
  786.                 if (Engine.isOnReadingPage(app)) {
  787.                     print.log("  [ÕÒÊé] ✓ Ö±½Ó½øÈëÔĶÁÒ³");
  788.                     return true;
  789.                 }

  790.                 // 5. ÔÚÊé¼®ÏêÇéÒ³ÕÒ"¿ªÊ¼ÔĶÁ"°´Å¥»ò"×󻬿ªÊ¼ÔĶÁ"Ìáʾ
  791.                 print.log("  [ÕÒÊé] 3. ²éÕÒÔĶÁÈë¿Ú...");
  792.                 var found = false;

  793.                 // 5a. Ïȼì²âÊÇ·ñÓÐ"×󻬿ªÊ¼ÔĶÁ"Ìáʾ£¨ÆßÃ¨ÌØÓУ©
  794.                 try {
  795.                     var nodesTip = auto.nodeSearch(2000);
  796.                     if (nodesTip) {
  797.                         // ÆßèÏêÇéÒ³×󻬽øÈëÔĶÁ
  798.                         var tipNode = nodesTip.id(app.°üÃû + ":id/tv_tip1");
  799.                         if (tipNode && tipNode.count() > 0) {
  800.                             print.log("  [ÕÒÊé] ¼ì²âµ½¡¾×󻬿ªÊ¼ÔĶÁ¡¿Ìáʾ£¬Ö´ÐÐ×ó»¬ÊÖÊÆ...");
  801.                             // ×󻬣º´ÓÓÒ(0.8)µ½×ó(0.2)£¬ÔÚÆÁÄ»Öв¿
  802.                             auto.swipPercent_v2(0.8, 0.5, 0.2, 0.5, 500, 0);
  803.                             sleep.second(3);
  804.                             Engine.closePopup();

  805.                             if (Engine.isOnReadingPage(app)) {
  806.                                 print.log("  [ÕÒÊé] ✓ ×󻬺ó½øÈëÔĶÁÒ³");
  807.                                 return true;
  808.                             }
  809.                             found = true; // ¼ÙÉè×󻬳ɹ¦ÁË
  810.                         }
  811.                     }
  812.                 } catch(e5a) {
  813.                     if (CONFIG.µ÷ÊÔģʽ) print.log("  [ÕÒÊé] 5a×󻬼ì²âÒì³£: " + e5a.message);
  814.                 }

  815.                 // 5b. ¾«È·Æ¥ÅäÔĶÁ°´Å¥ÎÄ×Ö
  816.                 if (!found) {
  817.                     for (var i = 0; i < readBtns.length; i++) {
  818.                         if (Engine.findAndClickText(readBtns[i])) {
  819.                             print.log("  [ÕÒÊé] ✓ µã»÷ÁË¡¾" + readBtns[i] + "¡¿");
  820.                             found = true;
  821.                             break;
  822.                         }
  823.                     }
  824.                 }

  825.                 // 5c. Ä£ºýÆ¥Å䣨Æßè°´Å¥¿ÉÄܺ¬Í¼±ê·ûºÅ£©
  826.                 if (!found) {
  827.                     var readKeywords = ["Ãâ·Ñ¶Á", "¿ªÊ¼¶Á", "Á¢¼´¶Á", "ÔĶÁ", "×ó»¬"];
  828.                     try {
  829.                         var nodes3 = auto.nodeSearch(2000);
  830.                         if (nodes3) {
  831.                             for (var ri = 0; ri < readKeywords.length; ri++) {
  832.                                 try {
  833.                                     var inc = nodes3.textIncludes(readKeywords[ri]);
  834.                                     if (inc && inc.count() > 0) {
  835.                                         var rn = inc.getNode(0);
  836.                                         if (rn && Engine.clickNode(rn, readKeywords[ri], "Ä£ºýÔĶÁ")) {
  837.                                             print.log("  [ÕÒÊé] ✓ Ä£ºýµã»÷¡¾" + readKeywords[ri] + "¡¿");
  838.                                             found = true;
  839.                                             break;
  840.                                         }
  841.                                     }
  842.                                 } catch(e3) {}
  843.                             }
  844.                         }
  845.                     } catch(e3b) {}
  846.                 }

  847.                 // 5d. Èç¹ûÕÒµ½"×ó»¬"ÎÄ×Öµ«Ö®Ç°Ã»´¦Àí£¬×ö×ó»¬ÊÖÊÆ
  848.                 if (!found) {
  849.                     try {
  850.                         var nodes4 = auto.nodeSearch(2000);
  851.                         if (nodes4) {
  852.                             var swipeTip = nodes4.textIncludes("×ó»¬");
  853.                             if (swipeTip && swipeTip.count() > 0) {
  854.                                 print.log("  [ÕÒÊé] ¼ì²âµ½¡¾×󻬡¿ÎÄ×Ö£¬Ö´ÐÐ×ó»¬ÊÖÊÆ...");
  855.                                 auto.swipPercent_v2(0.8, 0.5, 0.2, 0.5, 500, 0);
  856.                                 sleep.second(3);
  857.                                 Engine.closePopup();
  858.                                 found = true;
  859.                             }
  860.                         }
  861.                     } catch(e5d) {}
  862.                 }

  863.                 // 5e. ¶µµ×£ºÈç¹ûÒÔÉ϶¼Ã»ÕÒµ½£¬Ïȳ¢ÊÔ×󻬣¨Æßè×î³£¼ûµÄÈë¿Ú£©£¬ÔÙ³¢ÊÔµãµ×²¿
  864.                 if (!found) {
  865.                     print.log("  [ÕÒÊé] 3b. ³¢ÊÔ×ó»¬ÊÖÊÆ½øÈëÔĶÁ...");
  866.                     auto.swipPercent_v2(0.8, 0.5, 0.2, 0.5, 500, 0);
  867.                     sleep.second(3);
  868.                     Engine.closePopup();

  869.                     if (Engine.isOnReadingPage(app)) {
  870.                         print.log("  [ÕÒÊé] ✓ ×󻬺ó½øÈëÔĶÁÒ³");
  871.                         return true;
  872.                     }

  873.                     // ×󻬲»ÐУ¬ÔÙÊÔµãµ×²¿³£¼û°´Å¥Î»ÖÃ
  874.                     print.log("  [ÕÒÊé] 3c. ×ó»¬Î´³É¹¦£¬µãµ×²¿°´Å¥Î»ÖÃ...");
  875.                     Engine.clickPercent(0.5, 0.88);
  876.                     sleep.second(2);
  877.                     if (!Engine.isOnReadingPage(app)) {
  878.                         Engine.clickPercent(0.5, 0.80);
  879.                         sleep.second(2);
  880.                     }
  881.                 }

  882.                 // 6. µÈ´ý½øÈëÔĶÁÒ³
  883.                 sleep.second(3);
  884.                 Engine.closePopup();

  885.                 if (Engine.isOnReadingPage(app)) {
  886.                     print.log("  [ÕÒÊé] ✓ ÒѽøÈëÔĶÁÒ³");
  887.                     return true;
  888.                 }

  889.                 // 7. ¿ÉÄÜÐèÒªÏȼÓÈëÊé¼Ü²ÅÄÜÔĶÁ
  890.                 print.log("  [ÕÒÊé] 4. ³¢ÊÔ¼ÓÈëÊé¼Ü...");
  891.                 for (var j = 0; j < addBtns.length; j++) {
  892.                     if (Engine.findAndClickText(addBtns[j])) {
  893.                         print.log("  [ÕÒÊé] ✓ µã»÷ÁË¡¾" + addBtns[j] + "¡¿");
  894.                         sleep.second(2);
  895.                         break;
  896.                     }
  897.                 }

  898.                 // 8. ¼ÓÈëÊé¼ÜºóÔÙÕÒÔĶÁ°´Å¥
  899.                 for (var k = 0; k < readBtns.length; k++) {
  900.                     if (Engine.findAndClickText(readBtns[k])) {
  901.                         print.log("  [ÕÒÊé] ✓ ¼ÓÈëÊé¼Üºóµã»÷ÁË¡¾" + readBtns[k] + "¡¿");
  902.                         found = true;
  903.                         break;
  904.                     }
  905.                 }

  906.                 sleep.second(3);
  907.                 Engine.closePopup();

  908.                 if (Engine.isOnReadingPage(app)) {
  909.                     print.log("  [ÕÒÊé] ✓ ͨ¹ý¼ÓÈëÊé¼Ü½øÈëÔĶÁÒ³");
  910.                     return true;
  911.                 }

  912.                 // 9. ±¾ÂÖʧ°Ü£¬·µ»ØÊé³ÇÖØÊÔ
  913.                 print.log("  [ÕÒÊé] ⚠ µÚ" + (retry + 1) + "ÂÖʧ°Ü£¬·µ»ØÊé³ÇÖØÊÔ...");
  914.                 Engine.back();
  915.                 sleep.second(2);
  916.                 if (app.Êé³ÇTab×ø±ê) {
  917.                     Engine.clickPercent(app.Êé³ÇTab×ø±ê[0], app.Êé³ÇTab×ø±ê[1]);
  918.                     sleep.second(2);
  919.                 }

  920.             } catch(e) {
  921.                 print.log("  [ÕÒÊé] µÚ" + (retry + 1) + "ÂÖÒì³£: " + e.message);
  922.                 try { Engine.back(); sleep.second(2); } catch(e2) {}
  923.             }
  924.         }

  925.         print.log("  [ÕÒÊé] ⚠ " + maxRetry + "ÂÖ³¢ÊÔºóÈÔδ½øÈëÔĶÁÒ³");
  926.         return false;
  927.     },

  928.     // ¿´¹ã¸æÁì½±Àø
  929.     watchAd: function() {
  930.         this.totalAds++;
  931.         var elapsedMin = ((Date.now() - this.startTime) / 60000).toFixed(1);
  932.         print.log("\n[" + elapsedMin + "m] &#128250; µÚ" + this.totalAds + "´Î¿´¹ã¸æÁì½±Àø");

  933.         try {
  934.             // 0. ÏȹرտÉÄܵ²×¡µÄ¸¡´°
  935.             Engine.closePopup();

  936.             // 1. µãµ×²¿¸£Àû/ÈÎÎñTab
  937.             print.log("  [¹ã¸æ] 1. µã»÷¸£ÀûTab (" + this.app.¸£ÀûÒ³×ø±ê[0] + "," + this.app.¸£ÀûÒ³×ø±ê[1] + ")");
  938.             Engine.clickPercent(this.app.¸£ÀûÒ³×ø±ê[0], this.app.¸£ÀûÒ³×ø±ê[1]);
  939.             sleep.second(3);
  940.             Engine.closePopup();

  941.             // 2. ÕÒ"¿´ÊÓÆµÁì½ð±Ò"°´Å¥²¢µã»÷
  942.             print.log("  [¹ã¸æ] 2. ²éÕÒ¡¾" + this.app.¹ã¸æ°´Å¥ÎÄ×Ö + "¡¿");
  943.             var clicked = Engine.findAndClickText(this.app.¹ã¸æ°´Å¥ÎÄ×Ö);

  944.             if (!clicked) {
  945.                 // ³¢ÊÔÆäËû³£¼ûµÄ¿´¹ã¸æ°´Å¥ÎÄ×Ö
  946.                 var adBtns = ["¿´ÊÓÆµ", "¿´¹ã¸æ", "Áì½ð±Ò", "ÁìÈ¡", "¿´ÊÓÆµ½±Àø", "Á¢¼´ÁìÈ¡"];
  947.                 for (var i = 0; i < adBtns.length; i++) {
  948.                     if (Engine.findAndClickText(adBtns[i])) {
  949.                         clicked = true;
  950.                         break;
  951.                     }
  952.                 }
  953.             }

  954.             if (!clicked) {
  955.                 // ¶µµ×£ºµãÆÁÄ»ÖÐÏ·½³£¼ûλÖÃ
  956.                 print.log("  [¹ã¸æ] 2b. ÎÄ×ÖδÕÒµ½£¬µã³£¼ûλÖà (0.5, 0.65)");
  957.                 Engine.clickPercent(0.5, 0.65);
  958.                 sleep.second(2);
  959.             }

  960.             // 3. µÈ´ý¹ã¸æ²¥·Å
  961.             print.log("  [¹ã¸æ] 3. µÈ´ý¹ã¸æ²¥·Å " + CONFIG.¹ã¸æµÈ´ýÃë + " Ãë...");
  962.             Engine.smartSleep(CONFIG.¹ã¸æµÈ´ýÃë, 5);

  963.             // 4. ¹Ø±Õ¹ã¸æ½áÊøºóµÄµ¯´°
  964.             print.log("  [¹ã¸æ] 4. ¹Ø±Õ¹ã¸æµ¯´°");
  965.             Engine.closePopup();
  966.             sleep.second(2);

  967.             // 5. ·µ»ØÔĶÁÒ³
  968.             print.log("  [¹ã¸æ] 5. ·µ»ØÔĶÁÒ³");
  969.             Engine.back();
  970.             sleep.second(2);
  971.             Engine.closePopup();

  972.         } catch(e) {
  973.             print.log("  ⚠ ¿´¹ã¸æÒì³£: " + e.message);
  974.             // ¾¡Á¦»Ö¸´
  975.             try { Engine.back(); sleep.second(2); } catch(e2) {}
  976.             try { Engine.closePopup(); } catch(e3) {}
  977.         }
  978.     },

  979.     // È·±£»Øµ½ÔĶÁÒ³
  980.     ensureReadingPage: function() {
  981.         if (Engine.isOnReadingPage(this.app)) return;

  982.         print.log("  [»Ö¸´] ²»ÔÚÔĶÁÒ³£¬³¢ÊÔ»Ö¸´...");
  983.         var tryCount = 0;
  984.         while (tryCount < 3) {
  985.             tryCount++;
  986.             Engine.back();
  987.             sleep.second(2);
  988.             Engine.closePopup();
  989.             if (Engine.isOnReadingPage(this.app)) {
  990.                 print.log("  [»Ö¸´] ✓ Òѻص½ÔĶÁÒ³");
  991.                 return;
  992.             }
  993.             // µã»÷ÆÁÄ»ÖÐÑë³¢ÊÔ½øÈëÔĶÁ
  994.             Engine.clickPercent(0.5, 0.5);
  995.             sleep.second(2);
  996.             if (Engine.isOnReadingPage(this.app)) {
  997.                 print.log("  [»Ö¸´] ✓ Òѻص½ÔĶÁÒ³");
  998.                 return;
  999.             }
  1000.         }

  1001.         // ¶à´Î·µ»Ø¶¼²»ÔÚÔĶÁÒ³£¬¿ÉÄÜ»ØÍ˵½ÁËÊé¼Ü/Êé³Ç
  1002.         // ³¢ÊÔÖØÐÂÕÒÊé½øÈëÔĶÁ
  1003.         if (this.app.ÐèÒªÕÒÊé) {
  1004.             print.log("  [»Ö¸´] ·µ»Øµ½·ÇÔĶÁÒ³£¬³¢ÊÔÖØÐÂÕÒÊé...");
  1005.             this.findBookAndRead(this.app);
  1006.             if (Engine.isOnReadingPage(this.app)) {
  1007.                 print.log("  [»Ö¸´] ✓ ÖØÐ½øÈëÔĶÁÒ³");
  1008.                 return;
  1009.             }
  1010.         }

  1011.         print.log("  [»Ö¸´] ⚠ ¶à´Î³¢ÊÔºóÈÔδ»Øµ½ÔĶÁÒ³£¬¼ÌÐø·­Ò³");
  1012.     }
  1013. };

  1014. // =============================================================================
  1015. //  µÚËIJ¿·Ö£ºÖ÷Èë¿Ú
  1016. // =============================================================================

  1017. function main() {
  1018.     if (!Engine.init()) {
  1019.         print.log("✗ ÒýÇæ³õʼ»¯Ê§°Ü£¬Í˳ö");
  1020.         return;
  1021.     }

  1022.     // »ñȡĿ±êAppÅäÖÃ
  1023.     var app = null;
  1024.     for (var i = 0; i < CONFIG.App±í.length; i++) {
  1025.         if (CONFIG.App±í[i].±àºÅ === CONFIG.Ä¿±êApp±àºÅ) {
  1026.             app = CONFIG.App±í[i];
  1027.             break;
  1028.         }
  1029.     }

  1030.     if (!app) {
  1031.         print.log("✗ Ä¿±êApp±àºÅ " + CONFIG.Ä¿±êApp±àºÅ + " ²»´æÔÚ£¡");
  1032.         print.log("  ¿ÉÓñàºÅ£º");
  1033.         for (var j = 0; j < CONFIG.App±í.length; j++) {
  1034.             print.log("    " + CONFIG.App±í[j].±àºÅ + " = " + CONFIG.App±í[j].Ãû³Æ + "£¨" + CONFIG.App±í[j].°üÃû + "£©");
  1035.         }
  1036.         return;
  1037.     }

  1038.     // ÏÈ»Ø×ÀÃæ
  1039.     Engine.home();
  1040.     sleep.second(2);

  1041.     // ÔËÐÐ
  1042.     try {
  1043.         ReadingBot.run(app);
  1044.     } catch(e) {
  1045.         print.log("⚠ Ö÷Á÷³ÌÒì³£: " + e.message);
  1046.         print.log("  ³¢ÊÔ»Ö¸´...");
  1047.         try { Engine.home(); } catch(e2) {}
  1048.     }

  1049.     print.log("\n✓ ½Å±¾Íê³É£¡");
  1050.     print.timeEnd();
  1051. }

  1052. // Æô¶¯
  1053. main();
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2026-8-24 07:25 , Processed in 0.124488 second(s), 34 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí