B2BÍøÂçÈí¼þ

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

ÎÞ°­Ä£Ê½autoÌÔ±¦Ç§Å£×Ô¶¯·¢»õϵͳ

[¸´ÖÆÁ´½Ó]

1145

Ö÷Ìâ

1150

Ìû×Ó

7857

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7857
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷

ÎÞ°­Ä£Ê½autoÌÔ±¦Ç§Å£×Ô¶¯·¢»õϵͳ
ÎÞ°­Ä£Ê½autoÌÔ±¦Ç§Å£×Ô¶¯·¢»õϵͳ B2BÍøÂçÈí¼þ

  1. // =============================================================================
  2. //  ÌÔ±¦Ç§Å£×Ô¶¯·¢»õϵͳ  v3.0£¨¾«¼ò°æ£©
  3. //  ½öÖ§³ÖÎÞ°­Ä£Ê½£¨auto£©£¬Ê¹ÓÃÍêÕûÉÌÆ·±êÌ⾫׼ƥÅä
  4. //  ¹¦ÄÜ£º24Сʱ¼à¿ØÇ§Å£´ý·¢»õÁÐ±í ¡ú Æ¥ÅäÉÌÆ·±êÌâ ¡ú ·¢ËÍ¿¨ÃÜ/ÍøÅÌÁ´½Ó
  5. //  ÊÊÓãºAIWROK °²×¿×Ô¶¯»¯Æ½Ì¨£¬ES5/Rhino ÒýÇæ
  6. // =============================================================================

  7. importClass(java.io.File);
  8. importClass(java.io.FileWriter);
  9. importClass(java.io.BufferedReader);
  10. importClass(java.io.InputStreamReader);
  11. importClass(java.io.FileInputStream);
  12. importClass(java.io.FileOutputStream);
  13. importClass(java.io.OutputStreamWriter);

  14. // =============================================================================
  15. //  µÚÒ»²¿·Ö£ºÈ«¾ÖÅäÖÃ
  16. // =============================================================================

  17. var CONFIG = {
  18.     ǧţ°üÃû: "com.taobao.qianniu",
  19.     ÂÖѯ¼ä¸ô: 30,          // ¼ì²éж©µ¥¼ä¸ô£¨Ã룩
  20.     ×î´óÖØÊÔ: 3,
  21.     ²Ù×÷ÑÓʱ: 2,            // ÿ²½²Ù×÷ºóµÈ´ý£¨Ã룩

  22.     // ¿¨ÃÜ·þÎñÆ÷API£¨Áô¿ÕÔòÓñ¾µØÎļþ£©
  23.     ·þÎñÆ÷µØÖ·: "",
  24.     ·þÎñÆ÷ÃÜÔ¿: "",
  25.     ʹÓ÷þÎñÆ÷: false,

  26.     ¿¨ÃÜĿ¼: "/sdcard/¿¨Ãֿܲâ/",
  27.     ·¢»õ¼Ç¼Îļþ: "/sdcard/·¢»õ¼Ç¼.txt",

  28.     ÆôÓñ£»î: true,
  29.     ±£»î¼ä¸ô: 300,

  30.     ÆôÓÃÐü¸¡´°: true,

  31.     // debug=Ö»Êä³ö½ÚµãÕªÒª²»·¢»õ; test=´¦ÀíÒ»¸öÕæÊµ¶©µ¥²âÊÔ; false=Õý³£¼à¿Ø
  32.     µ÷ÊÔģʽ: "debug",
  33. };

  34. // =============================================================================
  35. //  µÚ¶þ²¿·Ö£ºÉÌÆ·ÅäÖã¨ÓÃÍêÕûÉÌÆ·±êÌ⣬¾«×¼Æ¥Å䣩
  36. // =============================================================================

  37. /**
  38. * ÅäÖÃ˵Ã÷£º
  39. *   ÉÌÆ·±êÌâ:  ÌÔ±¦ÉÌÆ·µÄÍêÕû±êÌ⣬ÓÃÓÚÔÚ¶©µ¥ÁбíÖо«×¼Æ¥Åä
  40. *   ·¢»õÀàÐÍ:  "¿¨ÃÜ" / "ÍøÅÌ" / "¿¨ÃÜ+ÍøÅÌ"
  41. *   ¿¨ÃÜÎļþ:  ±¾µØ¿¨ÃÜÎļþ·¾¶£¨Ã¿ÐÐÒ»¸ö¿¨ÃÜ£¬ÓùýµÄ×Ô¶¯É¾³ý£©
  42. *   ÍøÅÌÁ´½Ó:  ¸ÃÉÌÆ·¶ÔÓ¦µÄÍøÅÌÁ´½Ó
  43. *   ·¢»õ»°Êõ:  ·¢Ë͸øÂò¼ÒµÄ»°Êõ£¬{¿¨ÃÜ}ºÍ{ÍøÅÌ}×Ô¶¯Ìæ»»
  44. */
  45. var ÉÌÆ·ÅäÖÃ = {
  46.     "¶þÄê¼¶Êýѧ±ØË¢ÌâÉϲáÈ˽̰æ¿ÚËãÌ⿨ÌìÌìÁ·": {
  47.         ·¢»õÀàÐÍ: "¿¨ÃÜ",
  48.         ¿¨ÃÜÎļþ: "/sdcard/¿¨Ãֿܲâ/¶þÄê¼¶Êýѧ±ØË¢Ìâ.txt",
  49.         ÍøÅÌÁ´½Ó: "",
  50.         ·¢»õ»°Êõ: "ÄúºÃ£¬Äú¹ºÂòµÄ¡¾¶þÄê¼¶Êýѧ±ØË¢Ìâ¡¿ÒÑ·¢»õ£¡\n¿¨ÃÜ£º{¿¨ÃÜ}\nÇë´ò¿ªAPPÊäÈ뿨Ãܼ¤»îʹÓã¬ÓÐÎÊÌâËæÊ±ÁªÏµ~"
  51.     },
  52.     "Сѧµ¥Î»»»ËãÁ·Ï°Ôª½Ç·Ö³¤¶Èµ¥Î»×¨ÏîѵÁ·": {
  53.         ·¢»õÀàÐÍ: "ÍøÅÌ",
  54.         ¿¨ÃÜÎļþ: "",
  55.         ÍøÅÌÁ´½Ó: "https://pan.baidu.com/s/1aBcDeFgH ÌáÈ¡Âë: x1y2",
  56.         ·¢»õ»°Êõ: "ÄúºÃ£¬Äú¹ºÂòµÄ¡¾Ð¡Ñ§µ¥Î»»»ËãÁ·Ï°¡¿ÒÑ·¢»õ£¡\nÍøÅÌÏÂÔØÁ´½Ó£º{ÍøÅÌ}\nÇë¸´ÖÆÁ´½Óµ½ä¯ÀÀÆ÷ÏÂÔØ£¬ÓÐÎÊÌâËæÊ±ÁªÏµ~"
  57.     },
  58.     "Ò»Äê¼¶¼Ó¼õ¿ÚËãÁ·Ï°²á10ÒÔÄÚ20ÒÔÄÚ´ÕÊ®·¨": {
  59.         ·¢»õÀàÐÍ: "¿¨ÃÜ+ÍøÅÌ",
  60.         ¿¨ÃÜÎļþ: "/sdcard/¿¨Ãֿܲâ/Ò»Äê¼¶¼Ó¼õ¿ÚËã.txt",
  61.         ÍøÅÌÁ´½Ó: "https://pan.baidu.com/s/2bCdEfGhI ÌáÈ¡Âë: a3b4",
  62.         ·¢»õ»°Êõ: "ÄúºÃ£¬Äú¹ºÂòµÄ¡¾Ò»Äê¼¶¼Ó¼õ¿ÚËã¡¿ÒÑ·¢»õ£¡\n¼¤»î¿¨ÃÜ£º{¿¨ÃÜ}\nÍøÅÌÁ´½Ó£º{ÍøÅÌ}\nÇëÏÈÏÂÔØAPP£¬ÊäÈ뿨Ãܼ¤»îʹÓÃ~"
  63.     }
  64.     // ¼ÌÐøÌí¼ÓÉÌÆ·...°ÑÍêÕûµÄÌÔ±¦ÉÌÆ·±êÌâÌî½øÀ´¼´¿É
  65. };

  66. // =============================================================================
  67. //  µÚÈý²¿·Ö£ºÎÞ°­Ä£Ê½²Ù×÷·â×°£¨½öauto£¬ÎÞģʽ·ÖÖ§£©
  68. // =============================================================================

  69. var ActionAdapter = {

  70.     // ================================================================
  71.     //  »ù´¡²Ù×÷£¨Ö±½Óµ÷Óà auto ¶ÔÏó£©
  72.     // ================================================================

  73.     init: function() {
  74.         if (typeof auto !== 'undefined') {
  75.             logger.log("ÎÞ°­Ä£Ê½ÒѾÍÐ÷");
  76.             return true;
  77.         }
  78.         logger.err("auto¶ÔÏó²»´æÔÚ£¬Ç뿪ÆôÎÞÕϰ­·þÎñ");
  79.         return false;
  80.     },

  81.     click: function(x, y) {
  82.         try {
  83.             auto.clickPoint(x, y);
  84.             return true;
  85.         } catch (e) {
  86.             logger.err("µã»÷ʧ°Ü: " + e);
  87.             return false;
  88.         }
  89.     },

  90.     clickPercent: function(px, py) {
  91.         try {
  92.             auto.clickPercent(px, py);
  93.             return true;
  94.         } catch (e) {
  95.             logger.err("°Ù·Ö±Èµã»÷ʧ°Ü: " + e);
  96.             return false;
  97.         }
  98.     },

  99.     swipe: function(x1, y1, x2, y2, duration) {
  100.         duration = duration || 500;
  101.         try {
  102.             auto.swip(x1, y1, x2, y2, duration, 0);
  103.             return true;
  104.         } catch (e) {
  105.             logger.err("»¬¶¯Ê§°Ü: " + e);
  106.             return false;
  107.         }
  108.     },

  109.     swipePercent: function(px1, py1, px2, py2, duration) {
  110.         duration = duration || 500;
  111.         var w = screen.getScreenWidth();
  112.         var h = screen.getScreenHeight();
  113.         return this.swipe(
  114.             Math.floor(px1 * w), Math.floor(py1 * h),
  115.             Math.floor(px2 * w), Math.floor(py2 * h), duration
  116.         );
  117.     },

  118.     back: function() {
  119.         try { auto.back(); return true; } catch (e) { return false; }
  120.     },

  121.     home: function() {
  122.         try { auto.home(); return true; } catch (e) { return false; }
  123.     },

  124.     // ================================================================
  125.     //  ºËÐÄ£ºauto.getXml() ½Úµã½âÎö
  126.     //  Ç§Å£ºÜ¶à°´Å¥ÎÄ×ÖÔÚ desc ÊôÐÔÀ±ØÐëͬʱƥÅä text ºÍ desc
  127.     // ================================================================

  128.     getXml: function() {
  129.         try {
  130.             if (typeof auto !== 'undefined' && typeof auto.getXml === 'function') {
  131.                 return auto.getXml();
  132.             }
  133.         } catch (e) {
  134.             logger.err("getXmlʧ°Ü: " + e);
  135.         }
  136.         return "";
  137.     },

  138.     /**
  139.      * ´ÓXMLÖвéÕÒ°üº¬Ö¸¶¨ÎÄ×ֵĽڵ㣨ͬʱƥÅä text ºÍ desc£©
  140.      */
  141.     findNodes: function(xml, keyword) {
  142.         var results = [];
  143.         if (!xml || !keyword) return results;

  144.         var pattern = /<node\s+([^>]+?)(?:\/>|>)/g;
  145.         var match;
  146.         while ((match = pattern.exec(xml)) !== null) {
  147.             var attrs = match[1];
  148.             var textVal = "";
  149.             var descVal = "";
  150.             var tm = attrs.match(/text="([^"]*)"/);
  151.             if (tm) textVal = tm[1];
  152.             var dm = attrs.match(/desc="([^"]*)"/);
  153.             if (dm) descVal = dm[1];

  154.             if (textVal.indexOf(keyword) !== -1 || descVal.indexOf(keyword) !== -1) {
  155.                 results.push(this._parseNode(attrs, textVal, descVal));
  156.             }
  157.         }
  158.         return results;
  159.     },

  160.     /**
  161.      * ½âÎöXMLÖÐËùÓнڵ㣨²»¹ýÂ˹ؼü´Ê£¬ÓÃÓÚµ÷ÊԺ͸¸½Úµã²éÕÒ£©
  162.      */
  163.     findAllNodes: function(xml) {
  164.         var results = [];
  165.         if (!xml) return results;

  166.         var pattern = /<node\s+([^>]+?)(?:\/>|>)/g;
  167.         var match;
  168.         while ((match = pattern.exec(xml)) !== null) {
  169.             var attrs = match[1];
  170.             var tm = attrs.match(/text="([^"]*)"/);
  171.             var dm = attrs.match(/desc="([^"]*)"/);
  172.             results.push(this._parseNode(attrs, tm ? tm[1] : "", dm ? dm[1] : ""));
  173.         }
  174.         return results;
  175.     },

  176.     /**
  177.      * ½âÎöµ¥¸ö½ÚµãÊôÐÔ£¨ÄÚ²¿·½·¨£©
  178.      */
  179.     _parseNode: function(attrs, textVal, descVal) {
  180.         var cpm = attrs.match(/centerPercent="\[([0-9.]+),([0-9.]+)\]"/);
  181.         var cm = attrs.match(/center="\[(\d+),(\d+)\]"/);
  182.         var clm = attrs.match(/clickable="([^"]*)"/);
  183.         var idm = attrs.match(/id="([^"]*)"/);
  184.         var bm = attrs.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
  185.         var clsm = attrs.match(/class="([^"]*)"/);

  186.         return {
  187.             text: textVal,
  188.             desc: descVal,
  189.             x: cm ? parseInt(cm[1]) : 0,
  190.             y: cm ? parseInt(cm[2]) : 0,
  191.             px: cpm ? parseFloat(cpm[1]) : 0,
  192.             py: cpm ? parseFloat(cpm[2]) : 0,
  193.             clickable: clm ? clm[1] : "false",
  194.             id: idm ? idm[1] : "",
  195.             bounds: bm ? [parseInt(bm[1]), parseInt(bm[2]), parseInt(bm[3]), parseInt(bm[4])] : null,
  196.             class: clsm ? clsm[1] : ""
  197.         };
  198.     },

  199.     /**
  200.      * ²éÕÒ²»¿Éµã»÷½ÚµãµÄ×î½ü¿Éµã»÷¸¸½Úµã
  201.      */
  202.     findClickableParent: function(node, xml) {
  203.         if (!node || !node.bounds) return null;
  204.         var allNodes = this.findAllNodes(xml);
  205.         var nodeArea = (node.bounds[2] - node.bounds[0]) * (node.bounds[3] - node.bounds[1]);
  206.         var bestParent = null;
  207.         var bestArea = 999999999;

  208.         for (var i = 0; i < allNodes.length; i++) {
  209.             var p = allNodes[i];
  210.             if (p.clickable !== "true" || !p.bounds) continue;
  211.             // ¸¸½Úµã±ØÐë°üº¬Ä¿±ê½Úµã
  212.             if (p.bounds[0] <= node.bounds[0] && p.bounds[1] <= node.bounds[1] &&
  213.                 p.bounds[2] >= node.bounds[2] && p.bounds[3] >= node.bounds[3]) {
  214.                 var pArea = (p.bounds[2] - p.bounds[0]) * (p.bounds[3] - p.bounds[1]);
  215.                 // Ñ¡Ãæ»ý×îСµÄ¿Éµã»÷¸¸½Úµã£¨×î½üµÄ£©
  216.                 if (pArea < bestArea && pArea >= nodeArea) {
  217.                     bestArea = pArea;
  218.                     bestParent = p;
  219.                 }
  220.             }
  221.         }
  222.         return bestParent;
  223.     },

  224.     /**
  225.      * ÕÒÎÄ×Ö²¢µã»÷£¨ºËÐÄ·½·¨£©
  226.      * 1. ²éÕÒ°üº¬ÎÄ×ֵĽڵã
  227.      * 2. ÓÅÏȵã»÷ clickable=true µÄ½Úµã
  228.      * 3. ²»¿Éµã»÷µÄÕÒ¸¸½Úµãµã»÷
  229.      */
  230.     findTextAndClick: function(text, timeout) {
  231.         timeout = timeout || 3000;
  232.         var startTime = new Date().getTime();

  233.         while (new Date().getTime() - startTime < timeout) {
  234.             var xml = this.getXml();
  235.             if (!xml) { sleep.millisecond(ºÁÃë = 300); continue; }

  236.             var result = this._findBestNode(xml, text);
  237.             if (result) {
  238.                 if (result.clickable === "true") {
  239.                     this.clickPercent(result.px, result.py);
  240.                 } else {
  241.                     // ²»¿Éµã»÷ ¡ú ÕÒ×î½ü¿Éµã»÷¸¸½Úµã
  242.                     var parent = this.findClickableParent(result, xml);
  243.                     if (parent) {
  244.                         logger.log("½Úµã²»¿Éµã»÷£¬Ê¹Óø¸½Úµã: [" + result.text + "|" + result.desc + "] -> px=" + parent.px + " py=" + parent.py);
  245.                         this.clickPercent(parent.px, parent.py);
  246.                     } else {
  247.                         this.clickPercent(result.px, result.py);
  248.                     }
  249.                 }
  250.                 sleep.millisecond(ºÁÃë = 500);
  251.                 logger.log("ÕÒµ½²¢µã»÷: " + text + " (text=" + result.text + " desc=" + result.desc + ")", true);
  252.                 return true;
  253.             }
  254.             sleep.millisecond(ºÁÃë = 300);
  255.         }

  256.         logger.warn("δÕÒµ½ÎÄ×Ö: " + text);
  257.         return false;
  258.     },

  259.     /**
  260.      * ²éÕÒ×î¼Ñ½Úµã£¨ÓÅÏȿɵã»÷µÄ£©
  261.      */
  262.     _findBestNode: function(xml, text) {
  263.         var nodes = this.findNodes(xml, text);
  264.         if (nodes.length === 0) return null;
  265.         // ÓÅÏÈ·µ»Ø clickable=true
  266.         for (var i = 0; i < nodes.length; i++) {
  267.             if (nodes[i].clickable === "true") return nodes[i];
  268.         }
  269.         return nodes[0];
  270.     },

  271.     /**
  272.      * ÕÒÎÄ×Ö£¨·µ»Ø½ÚµãÐÅÏ¢£¬²»µã»÷£©
  273.      */
  274.     findText: function(text) {
  275.         var xml = this.getXml();
  276.         if (!xml) return null;
  277.         return this._findBestNode(xml, text);
  278.     },

  279.     hasText: function(text) {
  280.         return this.findText(text) !== null;
  281.     },

  282.     hasAnyText: function(texts) {
  283.         for (var i = 0; i < texts.length; i++) {
  284.             if (this.findText(texts[i])) return true;
  285.         }
  286.         return false;
  287.     },

  288.     /**
  289.      * Êä³öµ±Ç°Ò³ÃæËùÓÐÓÐÒâÒå½ÚµãµÄÕªÒª£¨µ÷ÊÔÓã©
  290.      */
  291.     dumpPageSummary: function() {
  292.         var xml = this.getXml();
  293.         if (!xml) { logger.warn("ÎÞ·¨»ñÈ¡Ò³ÃæXML"); return; }

  294.         var nodes = this.findAllNodes(xml);
  295.         var count = 0;
  296.         logger.log("====== Ò³Ãæ½ÚµãÕªÒª ======");
  297.         for (var i = 0; i < nodes.length; i++) {
  298.             var n = nodes[i];
  299.             // ¹ýÂ˵ô¿Õ°×½Úµã
  300.             if (n.text === "" && n.desc === "") continue;
  301.             logger.log("  [" + (n.clickable === "true" ? "¿Éµã»÷" : "  ²»¿É") + "] text=\"" + n.text + "\" desc=\"" + n.desc + "\" px=" + n.px + " py=" + n.py);
  302.             count++;
  303.         }
  304.         logger.log("====== ¹² " + count + " ¸öÓÐÒâÒå½Úµã ======");
  305.     },

  306.     /**
  307.      * ÊäÈëÎÄ×Ö£¨Í¨¹ý¼ôÌù°åÕ³Ìù£¬¼æÈÝÖÐÎÄ£©
  308.      */
  309.     inputText: function(text) {
  310.         try {
  311.             if (typeof Clipboard !== 'undefined' && Clipboard.copy) {
  312.                 Clipboard.copy(text);
  313.                 sleep.millisecond(ºÁÃë = 300);
  314.             }

  315.             // ³¢ÊÔÕ³Ìù
  316.             try {
  317.                 var node = auto.nodeSearch(3000).focused(true);
  318.                 if (node && typeof node.getNode === 'function') {
  319.                     var n = node.getNode(0);
  320.                     if (n && typeof n.paste === 'function') {
  321.                         n.paste();
  322.                     }
  323.                 }
  324.             } catch (pe) {}

  325.             sleep.second(Ãë = 1);
  326.             logger.log("ÒÑÊäÈëÎÄ×Ö: " + text.substring(0, 20) + (text.length > 20 ? "..." : ""));
  327.             return true;
  328.         } catch (e) {
  329.             logger.err("ÊäÈëÎÄ×Öʧ°Ü: " + e);
  330.             return false;
  331.         }
  332.     },

  333.     /**
  334.      * µÈ´ýÖ¸¶¨ÎÄ×Ö³öÏÖ
  335.      */
  336.     backToText: function(text, timeout) {
  337.         timeout = timeout || 10000;
  338.         var startTime = new Date().getTime();
  339.         while (new Date().getTime() - startTime < timeout) {
  340.             if (this.hasText(text)) return true;
  341.             sleep.millisecond(ºÁÃë = 500);
  342.         }
  343.         return false;
  344.     }
  345. };

  346. // =============================================================================
  347. //  µÚËIJ¿·Ö£ºÈÕ־ϵͳ£¨Ðü¸¡´° + Toast + print.log/err/warn£©
  348. // =============================================================================

  349. var logger = {
  350.     Ðü¸¡´°ÊµÀý: null,
  351.     ±êÌâ¿Ø¼þ: null,
  352.     ÄÚÈݿؼþ: null,
  353.     ״̬¿Ø¼þ: null,
  354.     ÈÕÖ¾»º³å: [],
  355.     ×î´óÐÐÊý: 12,
  356.     ͳ¼Æ: { ÂÖ´Î: 0, ·¢»õ: 0, ´íÎó: 0, Æô¶¯Ê±¼ä: null },

  357.     init: function() {
  358.         this.ͳ¼Æ.Æô¶¯Ê±¼ä = new Date();
  359.         if (!CONFIG.ÆôÓÃÐü¸¡´°) return;
  360.         try {
  361.             this.Ðü¸¡´°ÊµÀý = new floatUI();
  362.             this.Ðü¸¡´°ÊµÀý.loadXML(
  363.                 '<LinearLayout orientation="vertical" w="400" h="280" gravity="top" id="log_main" background="#CC000000">' +
  364.                 '  <LinearLayout orientation="horizontal" w="400" h="30" gravity="center_vertical" background="#FF1a1a2e">' +
  365.                 '    <TextView id="log_title" textColor="#FFD700" textSize="13sp" padding="8dp" layout_weight="1" text="&#128230; ÌÔ±¦×Ô¶¯·¢»õv3" />' +
  366.                 '  </LinearLayout>' +
  367.                 '  <LinearLayout orientation="horizontal" w="400" h="24" gravity="center_vertical" background="#FF16213e">' +
  368.                 '    <TextView id="log_status" textColor="#00FFFF" textSize="10sp" padding="6dp" layout_weight="1" text="״̬: ³õʼ»¯ÖÐ..." />' +
  369.                 '  </LinearLayout>' +
  370.                 '  <TextView id="log_content" textColor="#00FF00" textSize="10sp" padding="6dp" layout_weight="1" text="µÈ´ýÆô¶¯...\n" />' +
  371.                 '</LinearLayout>'
  372.             );
  373.             this.±êÌâ¿Ø¼þ = this.Ðü¸¡´°ÊµÀý.findViewById('log_title');
  374.             this.״̬¿Ø¼þ = this.Ðü¸¡´°ÊµÀý.findViewById('log_status');
  375.             this.ÄÚÈݿؼþ = this.Ðü¸¡´°ÊµÀý.findViewById('log_content');

  376.             var self = this;
  377.             setTimeout(function() {
  378.                 if (self.Ðü¸¡´°ÊµÀý) self.Ðü¸¡´°ÊµÀý.setPosition(5, 5);
  379.             }, 200);
  380.         } catch (e) {}
  381.     },

  382.     _time: function() {
  383.         var now = new Date();
  384.         var h = now.getHours(), m = now.getMinutes(), s = now.getSeconds();
  385.         return (h < 10 ? "0" : "") + h + ":" + (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s;
  386.     },

  387.     _¸üÐÂ״̬: function() {
  388.         if (!this.״̬¿Ø¼þ) return;
  389.         try {
  390.             var runtime = "";
  391.             if (this.ͳ¼Æ.Æô¶¯Ê±¼ä) {
  392.                 var diff = Math.floor((new Date() - this.ͳ¼Æ.Æô¶¯Ê±¼ä) / 1000);
  393.                 var h = Math.floor(diff / 3600);
  394.                 var m = Math.floor((diff % 3600) / 60);
  395.                 var s = diff % 60;
  396.                 runtime = " ÔËÐÐ" + (h > 0 ? h + "h" : "") + m + "m" + s + "s";
  397.             }
  398.             this.״̬¿Ø¼þ.setText("ÂÖ´Î:" + this.ͳ¼Æ.ÂÖ´Î + " | ·¢»õ:" + this.ͳ¼Æ.·¢»õ + " | ´íÎó:" + this.ͳ¼Æ.´íÎó + runtime);
  399.         } catch (e) {}
  400.     },

  401.     _toast: function(msg) {
  402.         try {
  403.             if (typeof toast !== 'undefined' && toast.show) toast.show("" + msg);
  404.         } catch (e) {}
  405.     },

  406.     _output: function(level, msg, showToast) {
  407.         var timeStr = this._time();
  408.         var levelTag = "";
  409.         if (level === "ÐÅÏ¢") { levelTag = "ℹ"; }
  410.         else if (level === "³É¹¦") { levelTag = "✅"; }
  411.         else if (level === "¾¯¸æ") { levelTag = "⚠"; }
  412.         else if (level === "´íÎó") { levelTag = "❌"; this.ͳ¼Æ.´íÎó++; }

  413.         var line = timeStr + " " + levelTag + " " + msg;

  414.         // °´¼¶±ðµ÷Óà AIWROK ƽ̨ԭÉú·½·¨
  415.         try {
  416.             if (level === "´íÎó" && typeof print !== 'undefined' && print.err) {
  417.                 print.err(line);
  418.             } else if (level === "¾¯¸æ" && typeof print !== 'undefined' && print.warn) {
  419.                 print.warn(line);
  420.             } else if (typeof print !== 'undefined' && print.log) {
  421.                 print.log(line);
  422.             } else if (typeof printl === 'function') {
  423.                 printl(line);
  424.             }
  425.         } catch (e) {}

  426.         // Ðü¸¡´°
  427.         this.ÈÕÖ¾»º³å.push(line);
  428.         if (this.ÈÕÖ¾»º³å.length > this.×î´óÐÐÊý) this.ÈÕÖ¾»º³å.shift();
  429.         if (this.ÄÚÈݿؼþ) {
  430.             try { this.ÄÚÈݿؼþ.setText(this.ÈÕÖ¾»º³å.join("\n")); } catch (e) {}
  431.         }
  432.         this._¸üÐÂ״̬();

  433.         if (showToast) this._toast(levelTag + " " + msg);
  434.     },

  435.     log: function(msg, toast) { this._output("ÐÅÏ¢", msg, toast); },
  436.     warn: function(msg, toast) { this._output("¾¯¸æ", msg, toast); },
  437.     err: function(msg, toast) { this._output("´íÎó", msg, toast); },
  438.     success: function(msg, toast) { this._output("³É¹¦", msg, toast); },

  439.     addShip: function() { this.ͳ¼Æ.·¢»õ++; this._¸üÐÂ״̬(); },
  440.     addRound: function() { this.ͳ¼Æ.ÂÖ´Î++; this._¸üÐÂ״̬(); }
  441. };

  442. // =============================================================================
  443. //  µÚÎ岿·Ö£º¿¨ÃܹÜÀí
  444. // =============================================================================

  445. var ¿¨ÃܹÜÀí = {

  446.     È¡±¾µØ¿¨ÃÜ: function(Îļþ·¾¶) {
  447.         try {
  448.             var file = new File(Îļþ·¾¶);
  449.             if (!file.exists()) {
  450.                 logger.err("¿¨ÃÜÎļþ²»´æÔÚ: " + Îļþ·¾¶);
  451.                 return null;
  452.             }
  453.             var reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
  454.             var lines = [], line;
  455.             while ((line = reader.readLine()) !== null) {
  456.                 line = line.trim();
  457.                 if (line !== "" && line.indexOf("#") !== 0) lines.push(line);
  458.             }
  459.             reader.close();

  460.             if (lines.length === 0) {
  461.                 logger.warn("¿¨ÃÜÎļþÒÑ¿Õ: " + Îļþ·¾¶);
  462.                 return null;
  463.             }
  464.             var ¿¨ÃÜ = lines[0];
  465.             logger.log("È¡³ö¿¨ÃÜ: " + ¿¨ÃÜ + " (Ê£Óà " + (lines.length - 1) + " ¸ö)");

  466.             var remaining = lines.slice(1);
  467.             var writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
  468.             for (var i = 0; i < remaining.length; i++) writer.write(remaining[i] + "\n");
  469.             writer.close();
  470.             return ¿¨ÃÜ;
  471.         } catch (e) {
  472.             logger.err("¶ÁÈ¡¿¨ÃÜʧ°Ü: " + e);
  473.             return null;
  474.         }
  475.     },

  476.     È¡·þÎñÆ÷¿¨ÃÜ: function(ÉÌÆ·ID) {
  477.         try {
  478.             var url = CONFIG.·þÎñÆ÷µØÖ· + "?action=get&product=" + ÉÌÆ·ID + "&key=" + CONFIG.·þÎñÆ÷ÃÜÔ¿;
  479.             logger.log("´Ó·þÎñÆ÷»ñÈ¡¿¨ÃÜ: " + url);
  480.             var response = http.get(url);
  481.             if (!response) { logger.err("·þÎñÆ÷ÎÞÏìÓ¦"); return null; }

  482.             try {
  483.                 var json = JSON.parse(response);
  484.                 if (json.code === 0 && json.data) {
  485.                     logger.log("·þÎñÆ÷·µ»Ø¿¨ÃÜ: " + json.data);
  486.                     return json.data;
  487.                 }
  488.                 logger.err("·þÎñÆ÷·µ»Ø´íÎó: " + (json.msg || json.message || response));
  489.             } catch (e) {
  490.                 if (response && response.length > 0) {
  491.                     logger.log("·þÎñÆ÷·µ»Ø¿¨ÃÜ: " + response);
  492.                     return response;
  493.                 }
  494.             }
  495.         } catch (e) {
  496.             logger.err("·þÎñÆ÷»ñÈ¡¿¨ÃÜʧ°Ü: " + e);
  497.         }
  498.         return null;
  499.     },

  500.     Éϱ¨ÒÑʹÓÃ: function(ÉÌÆ·ID, ¿¨ÃÜ, ¶©µ¥ºÅ) {
  501.         try {
  502.             var url = CONFIG.·þÎñÆ÷µØÖ· + "?action=report&product=" + ÉÌÆ·ID + "&key=" + ¿¨ÃÜ + "&order=" + ¶©µ¥ºÅ;
  503.             var response = http.get(url);
  504.             logger.log("·þÎñÆ÷Éϱ¨½á¹û: " + response);
  505.         } catch (e) {
  506.             logger.err("·þÎñÆ÷Éϱ¨Ê§°Ü: " + e);
  507.         }
  508.     },

  509.     È¡¿¨ÃÜ: function(ÉÌÆ·) {
  510.         if (CONFIG.ʹÓ÷þÎñÆ÷) return this.È¡·þÎñÆ÷¿¨ÃÜ(ÉÌÆ·.Ãû³Æ || "");
  511.         return this.È¡±¾µØ¿¨ÃÜ(ÉÌÆ·.¿¨ÃÜÎļþ);
  512.     },

  513.     ¼ì²é¿â´æ: function(ÉÌÆ·) {
  514.         if (CONFIG.ʹÓ÷þÎñÆ÷) return -1;
  515.         try {
  516.             var file = new File(ÉÌÆ·.¿¨ÃÜÎļþ);
  517.             if (!file.exists()) return 0;
  518.             var reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
  519.             var count = 0, line;
  520.             while ((line = reader.readLine()) !== null) {
  521.                 line = line.trim();
  522.                 if (line !== "" && line.indexOf("#") !== 0) count++;
  523.             }
  524.             reader.close();
  525.             return count;
  526.         } catch (e) { return -1; }
  527.     }
  528. };

  529. // =============================================================================
  530. //  µÚÁù²¿·Ö£º·¢»õ¼Ç¼
  531. // =============================================================================

  532. var ·¢»õ¼Ç¼ = {

  533.     ÒÑ·¢»õ: function(¶©µ¥ºÅ) {
  534.         try {
  535.             var file = new File(CONFIG.·¢»õ¼Ç¼Îļþ);
  536.             if (!file.exists()) return false;
  537.             var reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
  538.             var line;
  539.             while ((line = reader.readLine()) !== null) {
  540.                 if (line.indexOf(¶©µ¥ºÅ) !== -1) { reader.close(); return true; }
  541.             }
  542.             reader.close();
  543.         } catch (e) {}
  544.         return false;
  545.     },

  546.     ¼Ç¼: function(¶©µ¥ºÅ, ÉÌÆ·Ãû, ·¢»õÄÚÈÝ) {
  547.         try {
  548.             var writer = new OutputStreamWriter(new FileOutputStream(CONFIG.·¢»õ¼Ç¼Îļþ, true), "UTF-8");
  549.             var now = new Date();
  550.             var dateStr = now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate() + " " + logger._time();
  551.             writer.write(dateStr + " | " + ¶©µ¥ºÅ + " | " + ÉÌÆ·Ãû + " | " + ·¢»õÄÚÈÝ + "\n");
  552.             writer.close();
  553.             logger.log("ÒѼǼ·¢»õ: " + ¶©µ¥ºÅ + " -> " + ÉÌÆ·Ãû);
  554.         } catch (e) {
  555.             logger.err("¼Ç¼·¢»õʧ°Ü: " + e);
  556.         }
  557.     },

  558.     ½ñÈÕÊýÁ¿: function() {
  559.         try {
  560.             var file = new File(CONFIG.·¢»õ¼Ç¼Îļþ);
  561.             if (!file.exists()) return 0;
  562.             var reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
  563.             var now = new Date();
  564.             var today = now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + now.getDate();
  565.             var count = 0, line;
  566.             while ((line = reader.readLine()) !== null) {
  567.                 if (line.indexOf(today) !== -1) count++;
  568.             }
  569.             reader.close();
  570.             return count;
  571.         } catch (e) { return 0; }
  572.     }
  573. };

  574. // =============================================================================
  575. //  µÚÆß²¿·Ö£ºÇ§Å£×Ô¶¯»¯²Ù×÷
  576. // =============================================================================

  577. var ǧţ²Ù×÷ = {

  578.     Æô¶¯Ç§Å£: function() {
  579.         logger.log("Æô¶¯Ç§Å£...", true);
  580.         try {
  581.             app.openApp(CONFIG.ǧţ°üÃû);
  582.             for (var i = 8; i > 0; i--) {
  583.                 sleep.second(Ãë = 1);
  584.             }
  585.             logger.success("ǧţÒÑÆô¶¯");
  586.             return true;
  587.         } catch (e) {
  588.             logger.err("Æô¶¯Ç§Å£Ê§°Ü: " + e);
  589.             return false;
  590.         }
  591.     },

  592.     È·±£ÔËÐÐ: function() {
  593.         // ÎÞ°­Ä£Ê½Ã»ÓÐshell£¬Ö±½ÓÓÃapp.openAppÈ·±£ÔËÐÐ
  594.         app.openApp(CONFIG.ǧţ°üÃû);
  595.         sleep.second(Ãë = 3);
  596.     },

  597.     /**
  598.      * ¼ì²éÊÇ·ñÔÚ¶©µ¥¹ÜÀíÒ³Ãæ
  599.      */
  600.     ÔÚ¶©µ¥¹ÜÀíÒ³: function() {
  601.         return ActionAdapter.hasText("´ý·¢»õ") || ActionAdapter.hasText("´ý¸¶¿î") ||
  602.                ActionAdapter.hasText("ÒÑ·¢»õ") || ActionAdapter.hasText("´ß·¢»õ");
  603.     },

  604.     /**
  605.      * ¼ì²é´ý·¢»õ±êÇ©ÊÇ·ñÒÑÑ¡ÖÐ
  606.      */
  607.     ´ý·¢»õÒÑÑ¡ÖÐ: function() {
  608.         var xml = ActionAdapter.getXml();
  609.         if (!xml) return false;
  610.         var nodes = ActionAdapter.findNodes(xml, "´ý·¢»õ");
  611.         for (var i = 0; i < nodes.length; i++) {
  612.             // selected=true ±íʾÒÑÑ¡ÖÐ
  613.             var pattern = /<node\s+([^>]+?)(?:\/>|>)/g;
  614.             var match;
  615.             while ((match = pattern.exec(xml)) !== null) {
  616.                 var attrs = match[1];
  617.                 if ((attrs.indexOf("´ý·¢»õ") !== -1) && attrs.indexOf('selected="true"') !== -1) {
  618.                     return true;
  619.                 }
  620.             }
  621.         }
  622.         return false;
  623.     },

  624.     /**
  625.      * ½øÈë´ý·¢»õ¶©µ¥Áбí
  626.      * ¶àÌõ·¾¶£ºÖ±½ÓÕÒ"´ý·¢»õ"±êÇ© ¡ú ÕÒ"¶©µ¥¹ÜÀí"Èë¿Ú ¡ú Ê×Ò³ÖØÊÔ
  627.      */
  628.     ½øÈë´ý·¢»õÁбí: function() {
  629.         logger.log("½øÈë´ý·¢»õ¶©µ¥Áбí...", true);

  630.         // ·¾¶1£ºÖ±½Óµã»÷"´ý·¢»õ"±êÇ©
  631.         if (ActionAdapter.findTextAndClick("´ý·¢»õ", 3000)) {
  632.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  633.             if (this.ÔÚ¶©µ¥¹ÜÀíÒ³()) {
  634.                 logger.log("ÒÑÔÚ´ý·¢»õÁбíÒ³Ãæ");
  635.                 return true;
  636.             }
  637.         }

  638.         // ·¾¶2£ºÕÒ"¶©µ¥¹ÜÀí"Èë¿Ú
  639.         if (ActionAdapter.findTextAndClick("¶©µ¥¹ÜÀí", 2000)) {
  640.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  641.             if (ActionAdapter.findTextAndClick("´ý·¢»õ", 3000)) {
  642.                 sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  643.                 if (this.ÔÚ¶©µ¥¹ÜÀíÒ³()) return true;
  644.             }
  645.         }

  646.         // ·¾¶3£º´ÓÊ×Ò³ÕÒ¶©µ¥Èë¿Ú
  647.         ActionAdapter.home();
  648.         sleep.second(Ãë = 2);
  649.         if (ActionAdapter.findTextAndClick("¶©µ¥", 3000)) {
  650.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  651.             ActionAdapter.findTextAndClick("´ý·¢»õ", 3000);
  652.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  653.             if (this.ÔÚ¶©µ¥¹ÜÀíÒ³()) return true;
  654.         }

  655.         logger.warn("δÄܽøÈë´ý·¢»õÁбí");
  656.         return false;
  657.     },

  658.     /**
  659.      * ¼ì²éÊÇ·ñÓÐж©µ¥£¨¿Õ״̬Ïûʧ = Óж©µ¥£©
  660.      */
  661.     ÓÐж©µ¥: function() {
  662.         // ¿Õ״̬Ìáʾ
  663.         if (ActionAdapter.hasText("»¹Ã»ÓÐÏà¹Ø¶©µ¥") || ActionAdapter.hasText("ÔÝÎÞ")) {
  664.             return false;
  665.         }

  666.         // Óж©µ¥Ê±µÄÌØÕ÷ÎÄ×Ö
  667.         var ¶©µ¥ÌØÕ÷ = ["Á¢¼´·¢»õ", "È¥·¢»õ", "Âò¼ÒÒѸ¶¿î", "ÁªÏµÂò¼Ò"];
  668.         for (var i = 0; i < ¶©µ¥ÌØÕ÷.length; i++) {
  669.             if (ActionAdapter.hasText(¶©µ¥ÌØÕ÷[i])) {
  670.                 logger.log("¼ì²âµ½´ý·¢»õ¶©µ¥: " + ¶©µ¥ÌØÕ÷[i], true);
  671.                 return true;
  672.             }
  673.         }

  674.         // ¼ì²éÊÇ·ñÓж©µ¥ºÅ¸ñʽµÄÊý×Ö
  675.         var xml = ActionAdapter.getXml();
  676.         if (xml) {
  677.             var allNodes = ActionAdapter.findAllNodes(xml);
  678.             for (var j = 0; j < allNodes.length; j++) {
  679.                 if (allNodes[j].text && /^\d{15,20}$/.test(allNodes[j].text)) {
  680.                     logger.log("¼ì²âµ½¶©µ¥ºÅ: " + allNodes[j].text, true);
  681.                     return true;
  682.                 }
  683.             }
  684.         }
  685.         return false;
  686.     },

  687.     /**
  688.      * Æ¥ÅäÉÌÆ·£¨ÓÃÍêÕûÉÌÆ·±êÌ⾫׼ƥÅ䣩
  689.      * ±éÀúÉÌÆ·ÅäÖã¬ÔÚÒ³ÃæXMLÖвéÕÒÄĸöÉÌÆ·±êÌâ³öÏÖÁË
  690.      * @return {object|null} {Ãû³Æ, ÅäÖÃ, ½Úµã}
  691.      */
  692.     Æ¥ÅäÉÌÆ·: function() {
  693.         var xml = ActionAdapter.getXml();
  694.         if (!xml) xml = "";

  695.         for (var ÉÌÆ·±êÌâ in ÉÌÆ·ÅäÖÃ) {
  696.             // Ö±½ÓÓÃÍêÕû±êÌâÈ¥XMLÀïÕÒ
  697.             var nodes = ActionAdapter.findNodes(xml, ÉÌÆ·±êÌâ);
  698.             if (nodes.length > 0) {
  699.                 logger.success("¾«×¼Æ¥Åäµ½ÉÌÆ·: " + ÉÌÆ·±êÌâ, true);
  700.                 logger.log("  ½Úµã: text=[" + nodes[0].text + "] desc=[" + nodes[0].desc + "] px=" + nodes[0].px + " py=" + nodes[0].py);
  701.                 return {
  702.                     Ãû³Æ: ÉÌÆ·±êÌâ,
  703.                     ÅäÖÃ: ÉÌÆ·ÅäÖÃ[ÉÌÆ·±êÌâ],
  704.                     ½Úµã: nodes[0]
  705.                 };
  706.             }
  707.         }

  708.         // Èç¹ûÍêÕû±êÌâûƥÅäµ½£¬³¢ÊÔÄ£ºýÆ¥Å䣨±êÌâǰ6¸ö×Ö£©
  709.         for (var ±êÌâ in ÉÌÆ·ÅäÖÃ) {
  710.             var ¶Ì±êÌâ = ±êÌâ.substring(0, 6);
  711.             var nodes2 = ActionAdapter.findNodes(xml, ¶Ì±êÌâ);
  712.             if (nodes2.length > 0) {
  713.                 logger.log("Ä£ºýÆ¥Åäµ½ÉÌÆ·: " + ±êÌâ + " (¹Ø¼ü´Ê: " + ¶Ì±êÌâ + ")", true);
  714.                 return {
  715.                     Ãû³Æ: ±êÌâ,
  716.                     ÅäÖÃ: ÉÌÆ·ÅäÖÃ[±êÌâ],
  717.                     ½Úµã: nodes2[0]
  718.                 };
  719.             }
  720.         }

  721.         logger.warn("δƥÅäµ½ÈκÎÉÌÆ·");
  722.         return null;
  723.     },

  724.     /**
  725.      * »ñÈ¡µ±Ç°¶©µ¥ºÅ
  726.      */
  727.     »ñÈ¡¶©µ¥ºÅ: function() {
  728.         var xml = ActionAdapter.getXml();
  729.         if (xml) {
  730.             var patterns = [
  731.                 /¶©µ¥ºÅ[£º:]\s*(\d{10,20})/,
  732.                 /¶©µ¥±àºÅ[£º:]\s*(\d{10,20})/,
  733.                 /"(\d{15,20})"/
  734.             ];
  735.             for (var i = 0; i < patterns.length; i++) {
  736.                 var m = xml.match(patterns[i]);
  737.                 if (m && m[1]) {
  738.                     logger.log("ÌáÈ¡µ½¶©µ¥ºÅ: " + m[1]);
  739.                     return m[1];
  740.                 }
  741.             }
  742.         }
  743.         var ÁÙʱºÅ = "TEMP" + new Date().getTime();
  744.         logger.warn("δÄÜÌáÈ¡¶©µ¥ºÅ£¬Ê¹ÓÃÁÙʱºÅ: " + ÁÙʱºÅ);
  745.         return ÁÙʱºÅ;
  746.     },

  747.     /**
  748.      * µã»÷¶©µ¥½øÈëÏêÇéÒ³
  749.      */
  750.     µã»÷½øÈë¶©µ¥: function(ÉÌÆ·½Úµã) {
  751.         if (!ÉÌÆ·½Úµã) {
  752.             ActionAdapter.clickPercent(0.5, 0.4);
  753.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  754.         } else {
  755.             var node = ÉÌÆ·½Úµã.½Úµã || ÉÌÆ·½Úµã;
  756.             if (node.px > 0 && node.py > 0) {
  757.                 ActionAdapter.clickPercent(node.px, node.py);
  758.             } else {
  759.                 ActionAdapter.clickPercent(0.5, 0.4);
  760.             }
  761.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  762.         }

  763.         // ÑéÖ¤ÊÇ·ñ½øÈë¶©µ¥ÏêÇé
  764.         if (ActionAdapter.hasText("¶©µ¥ÏêÇé") || ActionAdapter.hasText("¶©µ¥ºÅ") ||
  765.             ActionAdapter.hasText("ÁªÏµÂò¼Ò") || ActionAdapter.hasText("·¢»õ") ||
  766.             ActionAdapter.hasText("°¢ÀïÍúÍú") || ActionAdapter.hasText("ÍúÍú")) {
  767.             logger.success("ÒѽøÈë¶©µ¥ÏêÇé");
  768.             return true;
  769.         }
  770.         if (ActionAdapter.hasText("È·ÈÏ·¢»õ") || ActionAdapter.hasText("ÎïÁ÷")) {
  771.             logger.success("ÒѽøÈë·¢»õÒ³Ãæ");
  772.             return true;
  773.         }

  774.         logger.warn("δÄܽøÈë¶©µ¥ÏêÇé");
  775.         return false;
  776.     },

  777.     /**
  778.      * ½øÈëÂò¼ÒÁÄÌì½çÃæ£¨µã°¢ÀïÍúÍú£©
  779.      */
  780.     ½øÈëÁÄÌì: function() {
  781.         logger.log("½øÈëÂò¼ÒÁÄÌì½çÃæ...");
  782.         var °´Å¥ÎÄ×Ö = ["°¢ÀïÍúÍú", "ÍúÍú", "ÁªÏµÂò¼Ò", "·¢ÏûÏ¢", "ÁªÏµ", "ÁôÑÔ"];
  783.         for (var i = 0; i < °´Å¥ÎÄ×Ö.length; i++) {
  784.             if (ActionAdapter.findTextAndClick(°´Å¥ÎÄ×Ö[i], 2000)) {
  785.                 sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  786.                 logger.success("ÒѽøÈëÁÄÌì½çÃæ: " + °´Å¥ÎÄ×Ö[i]);
  787.                 return true;
  788.             }
  789.         }
  790.         logger.warn("δÄܽøÈëÁÄÌì½çÃæ");
  791.         return false;
  792.     },

  793.     /**
  794.      * ÔÚÁÄÌì½çÃæ·¢ËÍÏûÏ¢
  795.      */
  796.     ·¢ËÍÏûÏ¢: function(ÏûÏ¢ÄÚÈÝ) {
  797.         logger.log("×¼±¸·¢ËÍÏûÏ¢...", true);

  798.         // ²½Öè1£ºµã»÷ÁÄÌìÊäÈë¿ò
  799.         ActionAdapter.clickPercent(0.5, 0.92);
  800.         sleep.second(Ãë = 1);

  801.         // ²½Öè2£ºÍ¨¹ý¼ôÌù°åÕ³Ìù
  802.         ActionAdapter.inputText(ÏûÏ¢ÄÚÈÝ);
  803.         sleep.second(Ãë = 1);

  804.         // ²½Öè3£ºµã»÷·¢ËͰ´Å¥
  805.         var ·¢ËͰ´Å¥ÎÄ×Ö = ["·¢ËÍ", "Send", "·¢ËÍÏûÏ¢"];
  806.         var ·¢Ëͳɹ¦ = false;
  807.         for (var i = 0; i < ·¢ËͰ´Å¥ÎÄ×Ö.length; i++) {
  808.             if (ActionAdapter.findTextAndClick(·¢ËͰ´Å¥ÎÄ×Ö[i], 2000)) {
  809.                 sleep.second(Ãë = 1);
  810.                 ·¢Ëͳɹ¦ = true;
  811.                 break;
  812.             }
  813.         }

  814.         // °Ù·Ö±Èµã»÷·¢ËͰ´Å¥£¨Í¨³£ÔÚÓÒϽǣ©
  815.         if (!·¢Ëͳɹ¦) {
  816.             ActionAdapter.clickPercent(0.95, 0.92);
  817.             sleep.second(Ãë = 1);
  818.             ·¢Ëͳɹ¦ = true;
  819.         }

  820.         if (·¢Ëͳɹ¦) logger.success("ÏûÏ¢ÒÑ·¢ËÍ", true);
  821.         return ·¢Ëͳɹ¦;
  822.     },

  823.     /**
  824.      * ·µ»Ø´ý·¢»õ¶©µ¥Áбí
  825.      */
  826.     ·µ»ØÁбí: function() {
  827.         logger.log("·µ»Ø¶©µ¥Áбí...");
  828.         ActionAdapter.back();
  829.         sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  830.         ActionAdapter.back();
  831.         sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);

  832.         if (!this.ÔÚ¶©µ¥¹ÜÀíÒ³()) {
  833.             sleep.second(Ãë = 1);
  834.             if (!this.ÔÚ¶©µ¥¹ÜÀíÒ³()) {
  835.                 logger.warn("·µ»Øºó²»ÔÚ¶©µ¥¹ÜÀíÒ³£¬ÖØÐ½øÈë");
  836.                 this.½øÈë´ý·¢»õÁбí();
  837.             }
  838.         }
  839.     },

  840.     /**
  841.      * Ö´Ðз¢»õ£¨ÍêÕûÁ÷³Ì£©
  842.      * ÔÚ¶©µ¥ÏêÇéÒ³µã»÷"·¢»õ" ¡ú ½øÈë·¢»õÒ³Ãæ ¡ú Ñ¡"ÎÞÐèÎïÁ÷" ¡ú Ìîд·¢»õÁôÑÔ ¡ú È·ÈÏ·¢»õ
  843.      * @param {object} ·¢»õÄÚÈÝ - {ÏûÏ¢, ÕªÒª, ¿¨ÃÜ}
  844.      * @return {boolean} ÊÇ·ñ·¢»õ³É¹¦
  845.      */
  846.     Ö´Ðз¢»õ: function(·¢»õÄÚÈÝ) {
  847.         logger.log("===== ¿ªÊ¼Ö´Ðз¢»õ²Ù×÷ =====", true);

  848.         // ²½Öè1£ºÔÚ¶©µ¥ÏêÇéÒ³µã»÷"·¢»õ"°´Å¥
  849.         var ·¢»õ°´Å¥ = ["Á¢¼´·¢»õ", "È¥·¢»õ", "·¢»õ"];
  850.         var µã»÷³É¹¦ = false;
  851.         for (var i = 0; i < ·¢»õ°´Å¥.length; i++) {
  852.             if (ActionAdapter.findTextAndClick(·¢»õ°´Å¥[i], 3000)) {
  853.                 sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  854.                 logger.log("Òѵã»÷·¢»õ°´Å¥: " + ·¢»õ°´Å¥[i]);
  855.                 µã»÷³É¹¦ = true;
  856.                 break;
  857.             }
  858.         }

  859.         if (!µã»÷³É¹¦) {
  860.             // ¿ÉÄÜÒѾ­ÔÚ·¢»õÒ³ÃæÁË
  861.             if (ActionAdapter.hasText("È·ÈÏ·¢»õ") || ActionAdapter.hasText("ÎÞÐèÎïÁ÷")) {
  862.                 logger.log("ÒÑÔÚ·¢»õÒ³Ãæ");
  863.                 µã»÷³É¹¦ = true;
  864.             } else {
  865.                 logger.err("δÕÒµ½·¢»õ°´Å¥");
  866.                 return false;
  867.             }
  868.         }

  869.         // ²½Öè2£ºµÈ´ý·¢»õÒ³Ãæ¼ÓÔØ£¬¼ì²éÒ³ÃæÌØÕ÷
  870.         sleep.second(Ãë = 2);
  871.         var ÔÚ·¢»õÒ³ = ActionAdapter.hasText("È·ÈÏ·¢»õ") ||
  872.                        ActionAdapter.hasText("ÎÞÐèÎïÁ÷") ||
  873.                        ActionAdapter.hasText("ÎïÁ÷¹«Ë¾") ||
  874.                        ActionAdapter.hasText("·¢»õ·½Ê½");
  875.         if (!ÔÚ·¢»õÒ³) {
  876.             logger.log("·¢»õÒ³ÃæÎ´¼ÓÔØ£¬ÔÙµÈÒ»ÏÂ...");
  877.             sleep.second(Ãë = 2);
  878.             ÔÚ·¢»õÒ³ = ActionAdapter.hasText("È·ÈÏ·¢»õ") ||
  879.                        ActionAdapter.hasText("ÎÞÐèÎïÁ÷") ||
  880.                        ActionAdapter.hasText("ÎïÁ÷¹«Ë¾");
  881.         }

  882.         if (ÔÚ·¢»õÒ³) {
  883.             logger.log("ÒѽøÈë·¢»õÒ³Ãæ");
  884.             ActionAdapter.dumpPageSummary();
  885.         }

  886.         // ²½Öè3£ºÑ¡Ôñ"ÎÞÐèÎïÁ÷"£¨ÐéÄâÉÌÆ·²»ÐèÒª¿ìµÝ£©
  887.         var ÎïÁ÷Ñ¡Ïî = ["ÎÞÐèÎïÁ÷", "×Ô¼ºÁªÏµÎïÁ÷", "ÐéÄâÉÌÆ·", "µç×ÓÆ¾Ö¤", "²»ÐèÒªÎïÁ÷"];
  888.         var Ñ¡ÁËÎïÁ÷ = false;
  889.         for (var j = 0; j < ÎïÁ÷Ñ¡Ïî.length; j++) {
  890.             if (ActionAdapter.findTextAndClick(ÎïÁ÷Ñ¡Ïî[j], 2000)) {
  891.                 sleep.second(Ãë = 1);
  892.                 logger.log("ÒÑÑ¡Ôñ: " + ÎïÁ÷Ñ¡Ïî[j]);
  893.                 Ñ¡ÁËÎïÁ÷ = true;
  894.                 break;
  895.             }
  896.         }

  897.         if (!Ñ¡ÁËÎïÁ÷) {
  898.             logger.log("δÕÒµ½'ÎÞÐèÎïÁ÷'Ñ¡Ï¿ÉÄÜĬÈÏÒÑÑ¡»òÒ³Ãæ²»Í¬");
  899.             // Êä³öÒ³Ãæ½Úµã°ïÖúÅŲé
  900.             ActionAdapter.dumpPageSummary();
  901.         }

  902.         // ²½Öè4£ºÌîд·¢»õÁôÑÔ/±¸×¢£¨°Ñ¿¨ÃÜ/ÍøÅÌÐÅÏ¢Ìî½øÈ¥£©
  903.         var ÁôÑÔ×Ö¶Î = ["·¢»õÁôÑÔ", "Âô¼Ò·¢»õ±¸×¢", "·¢»õ±¸×¢", "ÁôÑÔ", "±¸×¢", "¸øÂò¼ÒÁôÑÔ"];
  904.         var ÌîÁËÁôÑÔ = false;
  905.         for (var k = 0; k < ÁôÑÔ×Ö¶Î.length; k++) {
  906.             if (ActionAdapter.findTextAndClick(ÁôÑÔ×Ö¶Î[k], 1500)) {
  907.                 sleep.second(Ãë = 1);
  908.                 // µã»÷ºó¿ÉÄܳöÏÖÊäÈë¿ò£¬ÌîÈë·¢»õÄÚÈÝ
  909.                 ActionAdapter.inputText(·¢»õÄÚÈÝ.ÏûÏ¢);
  910.                 sleep.second(Ãë = 1);
  911.                 logger.log("ÒÑÌîд·¢»õÁôÑÔ: " + ÁôÑÔ×Ö¶Î[k]);
  912.                 ÌîÁËÁôÑÔ = true;
  913.                 break;
  914.             }
  915.         }

  916.         if (!ÌîÁËÁôÑÔ) {
  917.             // ³¢ÊÔÕÒÊäÈë¿òÖ±½ÓÌîд
  918.             logger.log("δÕÒµ½ÁôÑÔ×ֶΣ¬³¢ÊÔÖ±½ÓÕÒÊäÈë¿ò...");
  919.             // ·¢»õÒ³ÃæµÄÊäÈë¿òͨ³£ÔÚÖв¿
  920.             ActionAdapter.clickPercent(0.5, 0.5);
  921.             sleep.second(Ãë = 1);
  922.             ActionAdapter.inputText(·¢»õÄÚÈÝ.ÏûÏ¢);
  923.             sleep.second(Ãë = 1);
  924.         }

  925.         // ²½Öè5£ºµã»÷"È·ÈÏ·¢»õ"°´Å¥
  926.         logger.log("ѰÕÒÈ·ÈÏ·¢»õ°´Å¥...");
  927.         var È·Èϰ´Å¥ = ["È·ÈÏ·¢»õ", "È·¶¨·¢»õ", "Ìá½»", "È·¶¨"];
  928.         var È·Èϳɹ¦ = false;
  929.         for (var m = 0; m < È·Èϰ´Å¥.length; m++) {
  930.             if (ActionAdapter.findTextAndClick(È·Èϰ´Å¥[m], 3000)) {
  931.                 sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  932.                 logger.log("Òѵã»÷: " + È·Èϰ´Å¥[m]);
  933.                 È·Èϳɹ¦ = true;
  934.                 break;
  935.             }
  936.         }

  937.         if (!È·Èϳɹ¦) {
  938.             // ³¢ÊÔµã»÷ÓÒϽǵÄÈ·Èϰ´Å¥£¨³£¼ûλÖã©
  939.             logger.log("δÕÒµ½È·Èϰ´Å¥ÎÄ×Ö£¬³¢ÊÔµã»÷ÓÒϽÇ...");
  940.             ActionAdapter.clickPercent(0.85, 0.9);
  941.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  942.         }

  943.         // ²½Öè6£ºÑéÖ¤·¢»õÊÇ·ñ³É¹¦
  944.         sleep.second(Ãë = 2);
  945.         var ·¢»õ³É¹¦ = ActionAdapter.hasText("·¢»õ³É¹¦") ||
  946.                        ActionAdapter.hasText("ÒÑ·¢»õ") ||
  947.                        ActionAdapter.hasText("·¢»õÍê³É") ||
  948.                        ActionAdapter.hasText("Ìá½»³É¹¦");

  949.         // Èç¹ûûÓÐÃ÷È·µÄ³É¹¦Ìáʾ£¬¼ì²éÊÇ·ñ»Øµ½Á˶©µ¥ÏêÇé»òÁбí
  950.         if (!·¢»õ³É¹¦) {
  951.             if (ActionAdapter.hasText("¶©µ¥ÏêÇé") || ActionAdapter.hasText("´ý·¢»õ") ||
  952.                 ActionAdapter.hasText("ÒÑ·¢»õ") || ActionAdapter.hasText("´ß·¢»õ")) {
  953.                 logger.log("ÒÑ·µ»Ø¶©µ¥Ò³Ãæ£¬ÍÆ¶Ï·¢»õ³É¹¦");
  954.                 ·¢»õ³É¹¦ = true;
  955.             }
  956.         }

  957.         // ´¦Àí¿ÉÄܵĶþ´ÎÈ·Èϵ¯´°
  958.         if (ActionAdapter.hasText("È·¶¨") || ActionAdapter.hasText("È·ÈÏ")) {
  959.             var µ¯´°°´Å¥ = ["È·¶¨", "È·ÈÏ", "ÊÇ"];
  960.             for (var n = 0; n < µ¯´°°´Å¥.length; n++) {
  961.                 if (ActionAdapter.findTextAndClick(µ¯´°°´Å¥[n], 1500)) {
  962.                     sleep.second(Ãë = 1);
  963.                     logger.log("ÒÑÈ·Èϵ¯´°: " + µ¯´°°´Å¥[n]);
  964.                     break;
  965.                 }
  966.             }
  967.             sleep.second(Ãë = 2);
  968.             // Ôٴμì²é
  969.             if (!·¢»õ³É¹¦) {
  970.                 ·¢»õ³É¹¦ = ActionAdapter.hasText("·¢»õ³É¹¦") ||
  971.                            ActionAdapter.hasText("ÒÑ·¢»õ") ||
  972.                            ActionAdapter.hasText("·¢»õÍê³É");
  973.             }
  974.         }

  975.         if (·¢»õ³É¹¦) {
  976.             logger.success("·¢»õ²Ù×÷Íê³É£¡", true);
  977.         } else {
  978.             logger.warn("δÄÜÈ·ÈÏ·¢»õÊÇ·ñ³É¹¦£¬ÇëÊÖ¶¯¼ì²é");
  979.             ActionAdapter.dumpPageSummary();
  980.         }

  981.         return ·¢»õ³É¹¦;
  982.     },

  983.     /**
  984.      * ±ê¼Ç·¢»õ£¨¾É·½·¨±£Áô£¬½ö×÷Ϊºó±¸£©
  985.      */
  986.     ±ê¼Ç·¢»õ: function() {
  987.         logger.log("³¢ÊÔ±ê¼Ç¶©µ¥·¢»õ...");
  988.         var ·¢»õ°´Å¥ = ["·¢»õ", "È·ÈÏ·¢»õ", "Ò»¼ü·¢»õ"];
  989.         for (var i = 0; i < ·¢»õ°´Å¥.length; i++) {
  990.             if (ActionAdapter.findTextAndClick(·¢»õ°´Å¥[i], 2000)) {
  991.                 sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  992.                 logger.success("Òѱê¼Ç·¢»õ");
  993.                 return true;
  994.             }
  995.         }
  996.         logger.warn("δÕÒµ½·¢»õ°´Å¥");
  997.         return false;
  998.     }
  999. };

  1000. // =============================================================================
  1001. //  µÚ°Ë²¿·Ö£º·¢»õºËÐÄÁ÷³Ì
  1002. // =============================================================================

  1003. var ·¢»õÁ÷³Ì = {

  1004.     /**
  1005.      * ´¦ÀíÒ»¸ö¶©µ¥µÄÍêÕûÁ÷³Ì
  1006.      * Æ¥ÅäÉÌÆ· ¡ú ½øÏêÇé ¡ú Ö´Ðз¢»õ(Ñ¡ÎÞÐèÎïÁ÷+È·ÈÏ) ¡ú µãÍúÍú ¡ú ·¢ÏûÏ¢ ¡ú ·µ»ØÁбí
  1007.      */
  1008.     ´¦Àí¶©µ¥: function() {
  1009.         logger.log("========== ¿ªÊ¼´¦Àí¶©µ¥ ==========");

  1010.         // ²½Öè1£ºÆ¥ÅäÉÌÆ·
  1011.         var ÉÌÆ· = ǧţ²Ù×÷.Æ¥ÅäÉÌÆ·();
  1012.         if (!ÉÌÆ·) {
  1013.             logger.warn("δƥÅäµ½ÉÌÆ·£¬Ìø¹ý");
  1014.             return false;
  1015.         }

  1016.         // ²½Öè2£º»ñÈ¡¶©µ¥ºÅ
  1017.         var ¶©µ¥ºÅ = ǧţ²Ù×÷.»ñÈ¡¶©µ¥ºÅ();

  1018.         // ²½Öè3£º¼ì²éÊÇ·ñÒÑ·¢»õ
  1019.         if (·¢»õ¼Ç¼.ÒÑ·¢»õ(¶©µ¥ºÅ)) {
  1020.             logger.log("¶©µ¥ " + ¶©µ¥ºÅ + " ÒÑ·¢¹ý»õ£¬Ìø¹ý");
  1021.             ActionAdapter.swipePercent(0.5, 0.6, 0.5, 0.3, 500);
  1022.             sleep.second(Ãë = 1);
  1023.             return false;
  1024.         }

  1025.         // ²½Öè4£º×¼±¸·¢»õÄÚÈÝ
  1026.         var ·¢»õÄÚÈÝ = this.×¼±¸·¢»õÄÚÈÝ(ÉÌÆ·);
  1027.         if (!·¢»õÄÚÈÝ) {
  1028.             logger.err("×¼±¸·¢»õÄÚÈÝʧ°Ü");
  1029.             return false;
  1030.         }

  1031.         // ²½Öè5£ºµã»÷¶©µ¥½øÈëÏêÇé
  1032.         if (!ǧţ²Ù×÷.µã»÷½øÈë¶©µ¥(ÉÌÆ·.½Úµã)) {
  1033.             logger.err("½øÈë¶©µ¥ÏêÇéʧ°Ü");
  1034.             return false;
  1035.         }

  1036.         // ²½Öè6£ºÖ´Ðз¢»õ£¨µã·¢»õ ¡ú Ñ¡ÎÞÐèÎïÁ÷ ¡ú ÌîÁôÑÔ ¡ú È·ÈÏ·¢»õ£©
  1037.         var ·¢»õ½á¹û = ǧţ²Ù×÷.Ö´Ðз¢»õ(·¢»õÄÚÈÝ);
  1038.         if (·¢»õ½á¹û) {
  1039.             logger.success("¶©µ¥ÒÑ·¢»õ: " + ¶©µ¥ºÅ, true);
  1040.         } else {
  1041.             logger.warn("·¢»õ²Ù×÷δÄÜÈ·Èϳɹ¦£¬¼ÌÐø·¢ÍúÍúÏûÏ¢");
  1042.         }

  1043.         // ²½Öè7£º½øÈëÁÄÌì½çÃæ£¨µã°¢ÀïÍúÍú£¬¸øÂò¼Ò·¢¿¨ÃÜ/ÍøÅÌÐÅÏ¢£©
  1044.         // ´Ëʱ¿ÉÄÜÐèÒª·µ»Øµ½¶©µ¥ÏêÇéÒ³
  1045.         if (!ActionAdapter.hasText("¶©µ¥ÏêÇé") && !ActionAdapter.hasText("°¢ÀïÍúÍú")) {
  1046.             // Èç¹û·¢»õºó²»ÔÚ¶©µ¥ÏêÇ飬³¢ÊÔ·µ»Ø
  1047.             ActionAdapter.back();
  1048.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  1049.         }

  1050.         if (ǧţ²Ù×÷.½øÈëÁÄÌì()) {
  1051.             // ²½Öè8£º·¢ËÍÏûÏ¢
  1052.             if (ǧţ²Ù×÷.·¢ËÍÏûÏ¢(·¢»õÄÚÈÝ.ÏûÏ¢)) {
  1053.                 logger.success("ÍúÍúÏûÏ¢ÒÑ·¢ËÍ", true);
  1054.                 // ²½Öè9£º·µ»Ø¶©µ¥ÏêÇé
  1055.                 ActionAdapter.back();
  1056.                 sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  1057.             } else {
  1058.                 logger.err("·¢ËÍÍúÍúÏûϢʧ°Ü");
  1059.             }
  1060.         } else {
  1061.             logger.warn("δÄܽøÈëÍúÍúÁÄÌ죨·¢»õÒÑÍê³É£¬ÏûÏ¢·¢ËÍʧ°Ü£©");
  1062.         }

  1063.         // ²½Öè10£º¼Ç¼·¢»õ
  1064.         ·¢»õ¼Ç¼.¼Ç¼(¶©µ¥ºÅ, ÉÌÆ·.Ãû³Æ, ·¢»õÄÚÈÝ.ÕªÒª);

  1065.         // ²½Öè11£ºÉϱ¨·þÎñÆ÷
  1066.         if (CONFIG.ʹÓ÷þÎñÆ÷ && ·¢»õÄÚÈÝ.¿¨ÃÜ) {
  1067.             ¿¨ÃܹÜÀí.Éϱ¨ÒÑʹÓÃ(ÉÌÆ·.Ãû³Æ, ·¢»õÄÚÈÝ.¿¨ÃÜ, ¶©µ¥ºÅ);
  1068.         }

  1069.         logger.success("¶©µ¥ " + ¶©µ¥ºÅ + " ´¦ÀíÍê³É: " + ÉÌÆ·.Ãû³Æ, true);
  1070.         logger.success("½ñÈÕÒÑ·¢»õ: " + ·¢»õ¼Ç¼.½ñÈÕÊýÁ¿() + " µ¥");

  1071.         // ²½Öè12£º·µ»ØÁбí
  1072.         Ç§Å£²Ù×÷.·µ»ØÁбí();
  1073.         return true;
  1074.     },

  1075.     ×¼±¸·¢»õÄÚÈÝ: function(ÉÌÆ·) {
  1076.         var ÅäÖÃ = ÉÌÆ·.ÅäÖÃ;
  1077.         var »°Êõ = ÅäÖÃ.·¢»õ»°Êõ;
  1078.         var ¿¨ÃÜ = "";
  1079.         var ÍøÅÌ = ÅäÖÃ.ÍøÅÌÁ´½Ó || "";
  1080.         var ÕªÒª = "";

  1081.         if (ÅäÖÃ.·¢»õÀàÐÍ === "¿¨ÃÜ") {
  1082.             ¿¨ÃÜ = ¿¨ÃܹÜÀí.È¡¿¨ÃÜ(ÅäÖÃ);
  1083.             if (!¿¨ÃÜ) { logger.err("ÎÞ¿ÉÓÿ¨ÃÜ£¡ÉÌÆ·: " + ÉÌÆ·.Ãû³Æ); return null; }
  1084.             »°Êõ = »°Êõ.replace("{¿¨ÃÜ}", ¿¨ÃÜ).replace("{ÍøÅÌ}", ÍøÅÌ);
  1085.             ÕªÒª = "¿¨ÃÜ:" + ¿¨ÃÜ;
  1086.         } else if (ÅäÖÃ.·¢»õÀàÐÍ === "ÍøÅÌ") {
  1087.             »°Êõ = »°Êõ.replace("{ÍøÅÌ}", ÍøÅÌ).replace("{¿¨ÃÜ}", "");
  1088.             ÕªÒª = "ÍøÅÌ:" + ÍøÅÌ.substring(0, 20);
  1089.         } else if (ÅäÖÃ.·¢»õÀàÐÍ === "¿¨ÃÜ+ÍøÅÌ") {
  1090.             ¿¨ÃÜ = ¿¨ÃܹÜÀí.È¡¿¨ÃÜ(ÅäÖÃ);
  1091.             if (!¿¨ÃÜ) { logger.err("ÎÞ¿ÉÓÿ¨ÃÜ£¡ÉÌÆ·: " + ÉÌÆ·.Ãû³Æ); return null; }
  1092.             »°Êõ = »°Êõ.replace("{¿¨ÃÜ}", ¿¨ÃÜ).replace("{ÍøÅÌ}", ÍøÅÌ);
  1093.             ÕªÒª = "¿¨ÃÜ:" + ¿¨ÃÜ + " ÍøÅÌ:" + ÍøÅÌ.substring(0, 15);
  1094.         }
  1095.         return { ÏûÏ¢: »°Êõ, ÕªÒª: ÕªÒª, ¿¨ÃÜ: ¿¨ÃÜ };
  1096.     },

  1097.     /**
  1098.      * ´¦Àíµ±Ç°ËùÓпɼûµÄ´ý·¢»õ¶©µ¥
  1099.      */
  1100.     ´¦Àíµ±Ç°¶©µ¥: function() {
  1101.         var ´¦ÀíÊýÁ¿ = 0;
  1102.         var Á¬ÐøÎÞ¶©µ¥ = 0;

  1103.         for (var i = 0; i < 50; i++) {
  1104.             if (!ǧţ²Ù×÷.ÓÐж©µ¥()) {
  1105.                 Á¬ÐøÎÞ¶©µ¥++;
  1106.                 if (Á¬ÐøÎÞ¶©µ¥ >= 2) {
  1107.                     logger.log("ûÓиü¶à´ý·¢»õ¶©µ¥");
  1108.                     break;
  1109.                 }
  1110.                 ActionAdapter.swipePercent(0.5, 0.6, 0.5, 0.3, 500);
  1111.                 sleep.second(Ãë = 1);
  1112.                 continue;
  1113.             }
  1114.             Á¬ÐøÎÞ¶©µ¥ = 0;
  1115.             logger.log("--- ´¦ÀíµÚ " + (i + 1) + " ¸ö¶©µ¥ ---");

  1116.             if (this.´¦Àí¶©µ¥()) ´¦ÀíÊýÁ¿++;
  1117.             sleep.second(Ãë = 1);
  1118.         }

  1119.         logger.success("±¾ÂÖ´¦ÀíÍê³É£¬¹²·¢»õ " + ´¦ÀíÊýÁ¿ + " µ¥", true);
  1120.         return ´¦ÀíÊýÁ¿;
  1121.     }
  1122. };

  1123. // =============================================================================
  1124. //  µÚ¾Å²¿·Ö£º±£»îÐÄÌø£¨ÎÞ°­°æ£¬²»ÓÃshell£©
  1125. // =============================================================================

  1126. var ±£»îϵͳ = {
  1127.     Ïß³Ì: null,
  1128.     ÔËÐÐÖÐ: false,

  1129.     start: function() {
  1130.         if (!CONFIG.ÆôÓñ£»î) return;
  1131.         this.ÔËÐÐÖÐ = true;
  1132.         this.Ïß³Ì = new thread().runJsCode(function() {
  1133.             while (±£»îϵͳ.ÔËÐÐÖÐ) {
  1134.                 try {
  1135.                     // ÎÞ°­Ä£Ê½Ã»ÓÐshell£¬ÓÃgetXml¼ì²éǧţÊÇ·ñÔÚǰ̨
  1136.                     var xml = ActionAdapter.getXml();
  1137.                     if (!xml || xml === "") {
  1138.                         logger.warn("ǧţ¿ÉÄÜδÔËÐУ¬³¢ÊÔÖØÆô...");
  1139.                         app.openApp(CONFIG.ǧţ°üÃû);
  1140.                         sleep.second(Ãë = 8);
  1141.                     }
  1142.                     logger.log("±£»îÐÄÌø: ½ñÈÕ·¢»õ " + ·¢»õ¼Ç¼.½ñÈÕÊýÁ¿() + " µ¥");
  1143.                 } catch (e) {}
  1144.                 sleep.second(Ãë = CONFIG.±£»î¼ä¸ô);
  1145.             }
  1146.         });
  1147.         logger.log("±£»îÏß³ÌÒÑÆô¶¯");
  1148.     },

  1149.     stop: function() {
  1150.         this.ÔËÐÐÖÐ = false;
  1151.         logger.log("±£»îÏß³ÌÒÑÍ£Ö¹");
  1152.     }
  1153. };

  1154. // =============================================================================
  1155. //  µÚÊ®²¿·Ö£º¿â´æÔ¤¾¯
  1156. // =============================================================================

  1157. var ¿â´æÔ¤¾¯ = {
  1158.     ¼ì²éÈ«²¿: function() {
  1159.         var Ô¤¾¯ÉÌÆ· = [];
  1160.         for (var ÉÌÆ·Ãû in ÉÌÆ·ÅäÖÃ) {
  1161.             var ÅäÖÃ = ÉÌÆ·ÅäÖÃ[ÉÌÆ·Ãû];
  1162.             if (ÅäÖÃ.·¢»õÀàÐÍ === "¿¨ÃÜ" || ÅäÖÃ.·¢»õÀàÐÍ === "¿¨ÃÜ+ÍøÅÌ") {
  1163.                 var ¿â´æ = ¿¨ÃܹÜÀí.¼ì²é¿â´æ(ÅäÖÃ);
  1164.                 if (¿â´æ >= 0 && ¿â´æ < 5) {
  1165.                     Ô¤¾¯ÉÌÆ·.push(ÉÌÆ·Ãû + " (Ê£Óà" + ¿â´æ + "¸ö)");
  1166.                     logger.warn("¿â´æÔ¤¾¯: " + ÉÌÆ·Ãû + " ½öÊ£ " + ¿â´æ + " ¸ö¿¨ÃÜ£¡");
  1167.                 }
  1168.             }
  1169.         }
  1170.         return Ô¤¾¯ÉÌÆ·;
  1171.     }
  1172. };

  1173. // =============================================================================
  1174. //  µÚʮһ²¿·Ö£ºÖ÷¿ØÖÆÁ÷³Ì£¨³ÖÐø¼à¿ØÄ£Ê½£©
  1175. // =============================================================================

  1176. var Ö÷¿Ø = {
  1177.     ÔËÐÐÖÐ: false,
  1178.     ͳ¼Æ: { ×ÜÂÖ´Î: 0, ×Ü·¢»õ: 0, ¿ªÊ¼Ê±¼ä: null, ×îºó¼ì²é: null },

  1179.     ³õʼ»¯: function() {
  1180.         logger.log("========================================");
  1181.         logger.log("  ÌÔ±¦Ç§Å£×Ô¶¯·¢»õϵͳ v3.0");
  1182.         logger.log("  ¾«¼ò°æ ¡¤ ½öÎÞ°­Ä£Ê½ ¡¤ ÍêÕû±êÌâÆ¥Åä");
  1183.         logger.log("========================================");

  1184.         logger.init();

  1185.         if (!ActionAdapter.init()) {
  1186.             logger.err("ÎÞ°­Ä£Ê½³õʼ»¯Ê§°Ü£¬ÏµÍ³Í˳ö");
  1187.             return false;
  1188.         }

  1189.         try {
  1190.             var dir = new File(CONFIG.¿¨ÃÜĿ¼);
  1191.             if (!dir.exists()) dir.mkdirs();
  1192.         } catch (e) {}

  1193.         var Ô¤¾¯ = ¿â´æÔ¤¾¯.¼ì²éÈ«²¿();
  1194.         if (Ô¤¾¯.length > 0) logger.warn("¿â´æÔ¤¾¯: " + Ô¤¾¯.join(", "));

  1195.         logger.log("ÉÌÆ·ÊýÁ¿: " + Object.keys(ÉÌÆ·ÅäÖÃ).length);
  1196.         logger.log("¼à¿Ø¼ä¸ô: " + CONFIG.ÂÖѯ¼ä¸ô + "Ãë");

  1197.         this.ͳ¼Æ.¿ªÊ¼Ê±¼ä = new Date();
  1198.         logger.success("ϵͳ³õʼ»¯Íê³É", true);
  1199.         return true;
  1200.     },

  1201.     ½øÈë¼à¿Ø×´Ì¬: function() {
  1202.         Ç§Å£²Ù×÷.È·±£ÔËÐÐ();
  1203.         sleep.second(Ãë = 2);

  1204.         if (!ǧţ²Ù×÷.½øÈë´ý·¢»õÁбí()) {
  1205.             logger.err("½øÈë´ý·¢»õÁбíʧ°Ü£¡", true);
  1206.             return false;
  1207.         }

  1208.         if (!ǧţ²Ù×÷.´ý·¢»õÒÑÑ¡ÖÐ()) {
  1209.             ActionAdapter.findTextAndClick("´ý·¢»õ", 3000);
  1210.             sleep.second(Ãë = CONFIG.²Ù×÷ÑÓʱ);
  1211.         }

  1212.         logger.success("ÒѽøÈë´ý·¢»õÁÐ±í£¬¿ªÊ¼³ÖÐø¼à¿Ø", true);
  1213.         return true;
  1214.     },

  1215.     ¼à¿ØÒ»ÂÖ: function() {
  1216.         this.ͳ¼Æ.×ÜÂÖ´Î++;
  1217.         logger.addRound();

  1218.         try {
  1219.             if (!ǧţ²Ù×÷.ÔÚ¶©µ¥¹ÜÀíÒ³()) {
  1220.                 logger.warn("²»ÔÚ¶©µ¥¹ÜÀíÒ³Ãæ£¬ÖØÐ½øÈë");
  1221.                 this.½øÈë¼à¿Ø×´Ì¬();
  1222.                 return;
  1223.             }

  1224.             if (ǧţ²Ù×÷.ÓÐж©µ¥()) {
  1225.                 logger.success("¼ì²âµ½Ð¶©µ¥£¡¿ªÊ¼´¦Àí...", true);
  1226.                 var ·¢»õÊý = ·¢»õÁ÷³Ì.´¦Àíµ±Ç°¶©µ¥();
  1227.                 this.ͳ¼Æ.×Ü·¢»õ += ·¢»õÊý;
  1228.                 for (var i = 0; i < ·¢»õÊý; i++) logger.addShip();

  1229.                 if (·¢»õÊý > 0) {
  1230.                     logger.success("±¾ÂÖ·¢»õ " + ·¢»õÊý + " µ¥£¬ÀÛ¼Æ " + this.ͳ¼Æ.×Ü·¢»õ + " µ¥", true);
  1231.                 }

  1232.                 if (!ǧţ²Ù×÷.ÔÚ¶©µ¥¹ÜÀíÒ³()) this.½øÈë¼à¿Ø×´Ì¬();
  1233.             } else {
  1234.                 if (this.ͳ¼Æ.×ÜÂÖ´Î % 10 === 0) {
  1235.                     logger.log("¼à¿ØÖÐ... ÔÝÎÞж©µ¥ (ÂÖ´Î:" + this.ͳ¼Æ.×ÜÂÖ´Î + ")");
  1236.                 }
  1237.                 if (this.ͳ¼Æ.×ÜÂÖ´Î % 20 === 0) ¿â´æÔ¤¾¯.¼ì²éÈ«²¿();
  1238.             }
  1239.         } catch (e) {
  1240.             logger.err("¼à¿ØÒì³£: " + e, true);
  1241.             logger.log("Òì³£»Ö¸´£ºÖØÐ½øÈë´ý·¢»õÁбí...", true);
  1242.             this.½øÈë¼à¿Ø×´Ì¬();
  1243.         }
  1244.         this.ͳ¼Æ.×îºó¼ì²é = new Date();
  1245.     },

  1246.     Ö÷Ñ­»·: function() {
  1247.         this.ÔËÐÐÖÐ = true;
  1248.         logger.success("ϵͳ½øÈë³ÖÐø¼à¿ØÄ£Ê½", true);
  1249.         logger.log("Í£ÔÚ´ý·¢»õÁбíÒ³Ãæ£¬ÓÐÈËϵ¥×Ô¶¯·¢»õ", true);

  1250.         while (this.ÔËÐÐÖÐ) {
  1251.             try { this.¼à¿ØÒ»ÂÖ(); } catch (e) { logger.err("Ö÷Ñ­»·Òì³£: " + e, true); }

  1252.             var µÈ´ýÃëÊý = CONFIG.ÂÖѯ¼ä¸ô;
  1253.             for (var i = µÈ´ýÃëÊý; i > 0; i--) {
  1254.                 if (!this.ÔËÐÐÖÐ) break;
  1255.                 if (i % 10 === 0 || i <= 3) { try { logger._¸üÐÂ״̬(); } catch (e2) {} }
  1256.                 sleep.second(Ãë = 1);
  1257.             }
  1258.         }
  1259.     },

  1260.     start: function() {
  1261.         if (!this.³õʼ»¯()) return;
  1262.         ±£»îϵͳ.start();

  1263.         if (!this.½øÈë¼à¿Ø×´Ì¬()) {
  1264.             logger.err("ÎÞ·¨½øÈë¼à¿Ø×´Ì¬£¬5ÃëºóÖØÊÔ...", true);
  1265.             sleep.second(Ãë = 5);
  1266.             if (!this.½øÈë¼à¿Ø×´Ì¬()) {
  1267.                 logger.err("ÖØÊÔʧ°Ü£¬ÏµÍ³Í˳ö", true);
  1268.                 return;
  1269.             }
  1270.         }
  1271.         this.Ö÷Ñ­»·();
  1272.     },

  1273.     stop: function() {
  1274.         this.ÔËÐÐÖÐ = false;
  1275.         ±£»îϵͳ.stop();
  1276.         logger.log("ϵͳÒÑÍ£Ö¹");
  1277.     }
  1278. };

  1279. // =============================================================================
  1280. //  µÚÊ®¶þ²¿·Ö£ºÆô¶¯Èë¿Ú
  1281. // =============================================================================

  1282. function È·±£Ä¿Â¼´æÔÚ(·¾¶) {
  1283.     try {
  1284.         var dir = new File(·¾¶);
  1285.         if (!dir.exists()) dir.mkdirs();
  1286.     } catch (e) {}
  1287. }

  1288. function ´´½¨¿¨ÃÜʾÀý() {
  1289.     try {
  1290.         for (var ÉÌÆ·Ãû in ÉÌÆ·ÅäÖÃ) {
  1291.             var ÅäÖÃ = ÉÌÆ·ÅäÖÃ[ÉÌÆ·Ãû];
  1292.             if (ÅäÖÃ.¿¨ÃÜÎļþ && ÅäÖÃ.¿¨ÃÜÎļþ !== "") {
  1293.                 var file = new File(ÅäÖÃ.¿¨ÃÜÎļþ);
  1294.                 if (!file.exists()) {
  1295.                     var writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
  1296.                     writer.write("# " + ÉÌÆ·Ãû + " ¿¨ÃÜÎļþ\n");
  1297.                     writer.write("# ÿÐÐÒ»¸ö¿¨ÃÜ£¬ÓùýµÄ×Ô¶¯É¾³ý\n\n");
  1298.                     writer.write("Q5J3HHT8-NJMF\n");
  1299.                     writer.write("KA8CPLJP-DNCM\n");
  1300.                     writer.write("FYYEGC6D-KPCA\n");
  1301.                     writer.close();
  1302.                     logger.log("ÒÑ´´½¨¿¨ÃÜʾÀýÎļþ: " + ÅäÖÃ.¿¨ÃÜÎļþ);
  1303.                 }
  1304.             }
  1305.         }
  1306.     } catch (e) {
  1307.         logger.err("´´½¨¿¨ÃÜʾÀýʧ°Ü: " + e);
  1308.     }
  1309. }

  1310. // =============================================================================
  1311. //  Æô¶¯
  1312. // =============================================================================

  1313. È·±£Ä¿Â¼´æÔÚ(CONFIG.¿¨ÃÜĿ¼);
  1314. È·±£Ä¿Â¼´æÔÚ("/sdcard/");
  1315. ´´½¨¿¨ÃÜʾÀý();

  1316. if (CONFIG.µ÷ÊÔģʽ === "debug") {
  1317.     // ===== µ÷ÊÔģʽ£ºÊä³öÒ³Ãæ½Úµã£¬ÑéÖ¤XML½âÎö =====
  1318.     logger.init();
  1319.     logger.log("========================================");
  1320.     logger.log("  µ÷ÊÔģʽ£ºÑéÖ¤XML½âÎö");
  1321.     logger.log("========================================");

  1322.     if (!ActionAdapter.init()) {
  1323.         logger.err("ÎÞ°­Ä£Ê½³õʼ»¯Ê§°Ü");
  1324.     } else {
  1325.         Ç§Å£²Ù×÷.Æô¶¯Ç§Å£();
  1326.         sleep.second(Ãë = 3);

  1327.         logger.log("===== µ±Ç°Ò³Ãæ½ÚµãÕªÒª =====");
  1328.         ActionAdapter.dumpPageSummary();

  1329.         logger.log("===== ²âÊÔ²éÕÒ'´ý·¢»õ'½Úµã =====");
  1330.         var xml = ActionAdapter.getXml();
  1331.         var nodes = ActionAdapter.findNodes(xml, "´ý·¢»õ");
  1332.         logger.log("²éÕÒ'´ý·¢»õ'½á¹û: " + nodes.length + " ¸ö½Úµã");
  1333.         for (var i = 0; i < nodes.length; i++) {
  1334.             logger.log("  ½Úµã" + i + ": text=[" + nodes[i].text + "] desc=[" + nodes[i].desc + "] px=" + nodes[i].px + " py=" + nodes[i].py + " clickable=" + nodes[i].clickable);
  1335.             if (nodes[i].clickable === "false") {
  1336.                 var parent = ActionAdapter.findClickableParent(nodes[i], xml);
  1337.                 if (parent) {
  1338.                     logger.log("    -> ¸¸½Úµã: px=" + parent.px + " py=" + parent.py + " clickable=" + parent.clickable);
  1339.                 }
  1340.             }
  1341.         }

  1342.         logger.log("===== ²âÊÔÉÌÆ·±êÌâÆ¥Åä =====");
  1343.         var ÉÌÆ·½á¹û = ǧţ²Ù×÷.Æ¥ÅäÉÌÆ·();
  1344.         if (ÉÌÆ·½á¹û) {
  1345.             logger.success("Æ¥Åäµ½ÉÌÆ·: " + ÉÌÆ·½á¹û.Ãû³Æ);
  1346.         } else {
  1347.             logger.log("µ±Ç°Ò³ÃæÎ´Æ¥Åäµ½ÉÌÆ·£¨Õý³££¬ÁбíΪ¿ÕʱÎÞÉÌÆ·£©");
  1348.         }

  1349.         logger.success("µ÷ÊÔÍê³É£¡", true);
  1350.         logger.log("ÈçÐè²âÊÔÕæÊµ·¢»õ£¬Ç뽫 CONFIG.µ÷ÊÔģʽ ÉèΪ 'test'");
  1351.         logger.log("ÈçÐèÕý³£¼à¿Ø£¬Ç뽫 CONFIG.µ÷ÊÔģʽ ÉèΪ false");
  1352.     }

  1353. } else if (CONFIG.µ÷ÊÔģʽ === "test") {
  1354.     // ===== ²âÊÔģʽ£º´¦ÀíÒ»¸öÕæÊµ¶©µ¥£¬ÑéÖ¤ÍêÕû·¢»õÁ÷³Ì =====
  1355.     logger.init();
  1356.     logger.log("========================================");
  1357.     logger.log("  ²âÊÔģʽ£º´¦ÀíÒ»¸öÕæÊµ¶©µ¥");
  1358.     logger.log("========================================");

  1359.     if (!ActionAdapter.init()) {
  1360.         logger.err("ÎÞ°­Ä£Ê½³õʼ»¯Ê§°Ü");
  1361.     } else {
  1362.         // Æô¶¯Ç§Å£
  1363.         Ç§Å£²Ù×÷.Æô¶¯Ç§Å£();
  1364.         sleep.second(Ãë = 3);

  1365.         // ½øÈë´ý·¢»õÁбí
  1366.         if (!ǧţ²Ù×÷.½øÈë´ý·¢»õÁбí()) {
  1367.             logger.err("½øÈë´ý·¢»õÁбíʧ°Ü£¡", true);
  1368.         } else {
  1369.             logger.log("===== ¼ì²éÊÇ·ñÓдý·¢»õ¶©µ¥ =====");
  1370.             if (ǧţ²Ù×÷.ÓÐж©µ¥()) {
  1371.                 logger.success("¼ì²âµ½¶©µ¥£¡¿ªÊ¼´¦Àí...", true);

  1372.                 // Êä³öÒ³Ãæ½Úµã£¬¿´¿´¶©µ¥ÁÐ±í³¤Ê²Ã´Ñù
  1373.                 logger.log("===== ¶©µ¥Áбí½ÚµãÕªÒª =====");
  1374.                 ActionAdapter.dumpPageSummary();

  1375.                 // ³¢ÊÔÆ¥ÅäÉÌÆ·
  1376.                 logger.log("===== ³¢ÊÔÆ¥ÅäÉÌÆ· =====");
  1377.                 var ÉÌÆ· = ǧţ²Ù×÷.Æ¥ÅäÉÌÆ·();
  1378.                 if (ÉÌÆ·) {
  1379.                     logger.success("Æ¥Åäµ½ÉÌÆ·: " + ÉÌÆ·.Ãû³Æ, true);

  1380.                     // ´¦ÀíÕâ¸ö¶©µ¥
  1381.                     logger.log("===== ¿ªÊ¼´¦Àí¶©µ¥ =====");
  1382.                     var ½á¹û = ·¢»õÁ÷³Ì.´¦Àí¶©µ¥();
  1383.                     if (½á¹û) {
  1384.                         logger.success("²âÊÔ·¢»õ³É¹¦£¡", true);
  1385.                     } else {
  1386.                         logger.err("²âÊÔ·¢»õʧ°Ü£¬Çë¼ì²éÈÕÖ¾", true);
  1387.                     }
  1388.                 } else {
  1389.                     logger.warn("δƥÅäµ½ÉÌÆ·");
  1390.                     logger.log("Çë¼ì²éÉÌÆ·ÅäÖÃÖеıêÌâÊÇ·ñÓëÌÔ±¦¶©µ¥ÖеÄÉÌÆ·±êÌâÒ»ÖÂ");
  1391.                     logger.log("===== µ±Ç°Ò³ÃæËùÓнڵã =====");
  1392.                     ActionAdapter.dumpPageSummary();
  1393.                 }
  1394.             } else {
  1395.                 logger.log("µ±Ç°Ã»Óдý·¢»õ¶©µ¥£¬ÇëÏÈÔÚÌÔ±¦ÏÂÒ»µ¥²âÊÔ");
  1396.                 logger.log("===== µ±Ç°Ò³Ãæ½Úµã =====");
  1397.                 ActionAdapter.dumpPageSummary();
  1398.             }
  1399.         }

  1400.         logger.log("========================================");
  1401.         logger.log("²âÊÔÍê³É£¡");
  1402.         logger.log("ÈçÐèÕý³£¼à¿Ø£¬Ç뽫 CONFIG.µ÷ÊÔģʽ ÉèΪ false");
  1403.         logger.log("========================================");
  1404.     }

  1405. } else {
  1406.     // ===== Õý³£Ä£Ê½£º24Сʱ³ÖÐø¼à¿Ø =====
  1407.     Ö÷¿Ø.start();
  1408. }
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

¹Ø±Õ

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

map2

GMT+8, 2026-8-3 12:00 , Processed in 0.118807 second(s), 35 queries .

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