UNPKG

@stormking/emere

Version:

a nightmarejs replacement for scraping websites using electron.

122 lines (121 loc) 3.51 kB
"use strict"; /* eslint-disable no-console */ Object.defineProperty(exports, "__esModule", { value: true }); const electron_1 = require("electron"); const { ipcRenderer: ipc, contextBridge: bridge } = require('electron'); function sleep(ms) { return new Promise(res => { setTimeout(res, ms); }); } function waitUntilTrue(test, repeat, max) { const start = Date.now(); return new Promise((res, rej) => { let check = () => { let success = test(); if (success) res(true); else { if (Date.now() - start > max) { rej(new Error('timeout')); } else { setTimeout(check, repeat); } } }; check(); }); } window.addEventListener('load', async () => { let runScript = await electron_1.ipcRenderer.invoke('getCommands'); if (runScript.waitAfterLoad) { await sleep(runScript.waitAfterLoad); } if (runScript.waitForSelector) { await waitUntilTrue(() => !!document.querySelector(runScript.waitForSelector), 400, 10000); } let returnData; if (runScript.get === 'pdf') { returnData = ''; } else { returnData = document.getElementsByTagName('html')[0].innerHTML; } electron_1.ipcRenderer.send('returnData', returnData); }); Object.defineProperties(window, { resolve: { value: function (value) { ipc.send('response', value); }, }, reject: { value: function (err) { ipc.send('error', error(err)); } } }); // Listen for error events window.addEventListener('error', function (err) { ipc.send('page', 'error', error(err)); }, true); // prevent 'unload' and 'beforeunload' from being bound var defaultAddEventListener = window.addEventListener; window.addEventListener = function (type) { if (type === 'unload' || type === 'beforeunload') { return; } defaultAddEventListener.apply(window, arguments); }; // prevent 'onunload' and 'onbeforeunload' from being set Object.defineProperties(window, { onunload: { enumerable: true, writable: false, value: null }, onbeforeunload: { enumerable: true, writable: false, value: null } }); // listen for console.log var defaultLog = console.log; console.log = function (...p) { ipc.send('console', 'log', ...p); return defaultLog.apply(this, p); }; // listen for console.warn var defaultWarn = console.warn; console.warn = function (...p) { ipc.send('console', 'warn', ...p); return defaultWarn.apply(this, p); }; // listen for console.error var defaultError = console.error; console.error = function (...p) { ipc.send('console', 'error', ...p); return defaultError.apply(this, p); }; // overwrite the default alert window.alert = function (message) { ipc.send('page', 'alert', message); }; // overwrite the default prompt window.prompt = function (message, defaultResponse) { ipc.send('page', 'prompt', message, defaultResponse); return ''; }; // overwrite the default confirm window.confirm = function (message, defaultResponse) { ipc.send('page', 'confirm', message, defaultResponse); return defaultResponse; }; /** * Make errors serializeable */ function error(err) { return Object.fromEntries(Object.entries(Object.getOwnPropertyDescriptors(err)).map(([k, v]) => [k, v.value])); }