UNPKG

@35iter/spider-core

Version:

使用 puppetter-cluster 的爬虫工具。

77 lines (76 loc) 3.01 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.runCheck = exports.sleep = void 0; function checkByElement(page, selector) { return __awaiter(this, void 0, void 0, function* () { return !!(yield page.$(selector)); }); } // 计时结束后的标志 const sleepStr = "awake"; const sleep = (s) => { return new Promise((res) => { setTimeout(() => { res(sleepStr); }, s); }); }; exports.sleep = sleep; /** * * @param check 检查方法,可以返回 promise 或者 boolean * @param timeout 检查超时时间,默认 10 秒钟, * @returns */ function runCheck(check, timeout = 10 * 1000) { return __awaiter(this, void 0, void 0, function* () { let _resolve; let _reject; const maxTime = +new Date() + timeout; const returnPromise = new Promise((resolve, reject) => { _resolve = resolve; _reject = reject; }); (function runrun() { return __awaiter(this, void 0, void 0, function* () { // 剩余时间 const delta = maxTime - +new Date(); if (delta < 0) { _reject("检查失败[超时]"); } let checkResult = false; try { // 每次执行 check,都与剩余时间进行比较,避免超时 checkResult = yield Promise.race([check(), (0, exports.sleep)(delta)]); } catch (error) { _reject("检查失败[check方法执行出错]"); } if (checkResult === sleepStr) { // sleep 函数先结束,表示已经超时了 _reject("检查失败[超时]"); } else if (checkResult) { _resolve(); } else if (!checkResult) { // check 执行返回 false,表示还没得到正确的结果,继续执行 check setTimeout(() => __awaiter(this, void 0, void 0, function* () { runrun(); }), 100); } }); })(); return returnPromise; }); } exports.runCheck = runCheck;