iaunco 6 роки тому
коміт
e9b5fc8efc
5 змінених файлів з 158 додано та 0 видалено
  1. 3 0
      .gitignore
  2. 15 0
      README.md
  3. BIN
      example.png
  4. 126 0
      index.js
  5. 14 0
      package.json

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+node_modules/
+img/
+.idea/

+ 15 - 0
README.md

@@ -0,0 +1,15 @@
+使用步骤:
+```
+# 安装依赖
+npm install -g cnpm --registry=https://registry.npm.taobao.org
+cnpm i --registry=https://registry.npm.taobao.org
+```
+
+```
+# ===修改index.js的urls数组===
+```
+
+```
+# 运行程序
+node index.js
+```


+ 126 - 0
index.js

@@ -0,0 +1,126 @@
+const puppeteer = require('puppeteer');
+const fs = require('fs');
+
+
+//need: reply_info, sign
+//from url: https://testmis.ssti.net.cn/xswxcs/?reply_info=******&sign=******
+const info = [
+    ['reply_info', 'sign']
+];
+
+let infoOK = [];
+
+function getDate() {
+    const now = new Date();
+    return now.getFullYear() + "-" +
+        ((now.getMonth() + 1 < 10) ? "0" + (now.getMonth() + 1) : (now.getMonth() + 1)) + "-" +
+        ((now.getDate() < 10) ? "0" + now.getDate() : now.getDate());
+}
+
+async function interval() {
+    const browser = await puppeteer.launch({
+        // headless: false, // 是否隐藏窗口(默认true)
+        // defaultViewport: {width: 800, height: 600} // 截图大小
+    });
+    let lastDay = null; // 记录上一秒的日期
+    setInterval(async function () {
+        const now = new Date();
+        const day = now.getDate();
+        const hour = now.getHours();
+        const min = now.getMinutes();
+        if (lastDay === null) {
+            lastDay = day;
+        } else if (lastDay !== day) {
+            // 日期变动,清空数组
+            infoOK = [];
+        }
+        if ((hour === 0 && min <= 30) || hour >= 16) {
+            return;
+        }
+        for (let i = 0, j = info.length; i < j; i++) {
+            if (info[i] && info[i][0] && info[i][1] && !infoOK[i]) {
+                infoOK[i] = true;
+                try {
+                    await run(browser, info[i][0], info[i][1]);
+                } catch (e) {
+                    console.log(i, e);
+                    setTimeout(function () {
+                        infoOK[i] = false; // 出错,一分钟后重试
+                    }, 60000);
+                    return;
+                }
+            }
+        }
+    }, 1000);
+}
+
+async function run(browser, replyInfo, sign) {
+    return new Promise(async function (resolve, reject) {
+        const page = await browser.newPage();
+        try {
+            await page.goto("https://testmis.ssti.net.cn/xswxcs/?reply_info=" + replyInfo + "&sign=" + sign);
+        } catch (e) {
+            reject(e);
+            return;
+        }
+
+        if (page.url().indexOf("https://open.weixin.qq.com/") !== -1) {
+            await page.close();
+            reject("URL Error");
+            return;
+        }
+        try {
+            await page.goto("https://testmis.ssti.net.cn/xswxcs/pages/Epidemic/EpidemicApply.aspx", {waitUntil: 'networkidle2'});
+        } catch (e) {
+            reject(e);
+            return;
+        }
+        if (page.url().indexOf("https://open.weixin.qq.com/") !== -1) {
+            await page.close();
+            reject("URL Error");
+            return;
+        }
+        try {
+            const msg = await page.$eval("#layui-m-layer0 .layui-m-layercont", el => el.innerText);
+            if (msg.indexOf("每日开放时间为") !== -1) {
+                await page.close();
+                reject("Time Error");
+                return;
+            }
+        } catch (e) {
+            // 捕捉可能的eval错误
+        }
+        const name = await page.$eval("#div2 input", el => el.value);
+        console.log(name);
+        await page.click("#Apply_Epidemic");
+        try {
+            await page.screenshot({path: "img/" + name + "-" + getDate() + '.png'});
+        } catch (e) {
+            // 捕捉可能的截图错误
+        }
+
+        await page.close();
+        resolve();
+    });
+}
+
+// 新建文件夹
+function mkdir() {
+    return new Promise(function (resolve, reject) {
+        fs.mkdir("./img", (err) => {
+            if (err && err.code !== 'EEXIST') {
+                reject(err);
+            } else {
+                resolve();
+            }
+        });
+    });
+}
+
+// 初始化
+async function init() {
+    await mkdir();
+    interval();
+}
+
+init();

+ 14 - 0
package.json

@@ -0,0 +1,14 @@
+{
+  "name": "puppeteer_auto_report",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "iaun",
+  "license": "ISC",
+  "dependencies": {
+    "puppeteer": "^2.1.1"
+  }
+}