| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- 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();
- const sec = now.getSeconds();
- if (lastDay !== null && lastDay !== day) {
- // 日期变动,清空数组
- infoOK = [];
- }
- lastDay = day;
- if ((hour === 0 && min < 30) || (hour === 0 && min === 15 && sec <= 10) || 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("[" + hour + " " + min + " " + sec + "]", i, e);
- setTimeout(function () {
- infoOK[i] = false; // 出错,一分钟后重试
- }, 60000);
- // return;
- }
- }
- }
- }, 1000);
- }
- function sleep(time) {
- return new Promise(function (resolve) {
- setTimeout(function () {
- resolve();
- }, time);
- });
- }
- 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) {
- await page.close();
- 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) {
- await page.close();
- 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错误
- }
- let name;
- try {
- name = await page.$eval("#div2 input", el => el.value);
- } catch (e) {
- await page.close();
- reject("Get Name Error");
- return;
- }
- await page.on('response', async (response) => {
- if (response.url() === "https://testmis.ssti.net.cn/xswxcs/Api/MedicalObHandle.ashx?action=add") {
- const data = await response.json();
- if (data["msg"].indexOf("成功") !== -1) {
- console.log(name + " 成功");
- try {
- await page.screenshot({path: "img/" + name + "-" + getDate() + '.png'});
- } catch (e) {
- // 捕捉可能的截图错误
- }
- // await sleep(2000);
- await page.close();
- resolve();
- } else {
- console.log(name + " 失败:" + data["msg"]);
- await page.close();
- reject(data["msg"]);
- }
- } else {
- // 不应该还有其他请求(也可能是提交URL发生改变)
- await page.close();
- reject("Unknown URL: " + response.url());
- }
- });
- try {
- await page.click("#Apply_Epidemic");
- } catch (e) {
- await page.close();
- reject("Submit Error");
- }
- // await sleep(2000);
- // 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();
|