@stormking/emere
Version:
a nightmarejs replacement for scraping websites using electron.
88 lines (87 loc) • 3.11 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const electron_1 = require("electron");
const cross_fetch_1 = __importDefault(require("cross-fetch"));
const promises_1 = __importDefault(require("node:fs/promises"));
const node_os_1 = __importDefault(require("node:os"));
const node_path_1 = __importDefault(require("node:path"));
const message_1 = require("./message");
const adblocker_electron_1 = require("@ghostery/adblocker-electron");
let mainWindow = null;
async function createWindow() {
mainWindow = new electron_1.BrowserWindow({
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
nodeIntegrationInSubFrames: true,
preload: __dirname + '/preload.js'
},
height: 600,
width: 800,
show: false
});
const cacheFile = node_path_1.default.join(node_os_1.default.tmpdir(), 'electronBlocker.bin');
const blocker = await adblocker_electron_1.ElectronBlocker.fromLists(cross_fetch_1.default, adblocker_electron_1.fullLists, {
enableCompression: true,
}, {
path: cacheFile,
read: promises_1.default.readFile,
write: promises_1.default.writeFile,
});
blocker.enableBlockingInSession(mainWindow.webContents.session);
mainWindow.on('closed', () => {
mainWindow = null;
});
// console.log('runner create window done')
let runScript = await parent.call('getCommands', null);
electron_1.ipcMain.handle('getCommands', () => {
return runScript;
});
electron_1.ipcMain.once('returnData', async (evt, data) => {
if (runScript.get === 'pdf') {
data = (await evt.sender.printToPDF({})).toJSON();
}
else {
data = Buffer.from(data).toJSON();
}
await parent.call('returnData', { data });
mainWindow.close();
});
const params = {};
if (runScript.body) {
params.postData = [{ type: 'rawData', bytes: Buffer.from(runScript.body) }];
}
if (runScript.header) {
params.extraHeaders = Object.entries(runScript.header).map(e => `${e[0]}: ${e[1]}`).join('\n');
}
if (runScript.userAgent) {
params.userAgent = runScript.userAgent;
}
if (runScript.referrer) {
params.httpReferrer = runScript.referrer;
}
await mainWindow.loadURL(runScript.url, params);
// process.send({ init: 'done' })
}
electron_1.ipcMain.on('console', (evt, ...data) => {
console.log(data);
});
electron_1.ipcMain.on('page', (evt, ...data) => {
console.log('page', data);
});
electron_1.app.on('ready', createWindow);
electron_1.app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
electron_1.app.quit();
}
});
electron_1.app.on('activate', () => {
if (mainWindow === null) {
createWindow();
}
});
const parent = (0, message_1.init)(process);
// console.log('runner init done');