Подключить chromium headless в Electron
Приветсвую!
У меня есть приложение на Electron (vue-cli-plugin-electron-builder)
Я хочу вызвать из интерфейса chromiumdriver и фоново получить HTML страницы удаленного SPA сайта.
У меня в голове два варианта:
- понять как вызвать по запросу окно браузера электрона с параметром --headless и спрасить страницу
- написать nodejs скрипт и вызвать его из интерфейса
Я пока что пошел по второму варианту:
const remote = require('webdriverio').remote;
let browser;
async function f() {
try {
browser = await remote({
capabilities: {
browserName: 'chrome',
// todo get path from electron
// chromeOptions: { binary: '...'},
},
});
await browser.navigateTo('http://mysite.com/');
const title = await browser.getHTML();
return title;
} catch (e) {
console.error(e);
} finally {
browser.deleteSession();
}
}
module.exports = f;
Но не получается из интерфейса вызвать nodejs скрипт...
Ответы (1 шт):
Автор решения: Андрей Сорока
→ Ссылка
Мое решение
UI:
methods: {
myFunction() {
ipcRenderer.send('node:getHtmlPage', { key: '1', url: 'https://furyferret.com' });
ipcRenderer.on('node:getHtmlPage', (event, payload) => {
console.log(payload);
});
// todo dont't work ?
// ipcRenderer.invoke('some-name', { nickname: 1, site: 'er' }).then((result) => {
// console.log(result);
// });
},
},
Background.js > import your js file
import { ipcMain, BrowserWindow } from 'electron';
const EVENT_KEY = 'node:getHtmlPage';
function pause(time) {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, time);
});
}
async function getHtmlPage(url) {
const win = new BrowserWindow({});
await win.loadURL(url);
await pause(5000);
const html = await win.webContents.executeJavaScript('document.documentElement.innerHTML');
return html;
}
ipcMain.on(EVENT_KEY, async (event, { key, url }) => {
getHtmlPage(url)
.then((html) => {
event.sender.send(EVENT_KEY, {
key, url, html, isSuccessful: true,
});
})
.catch((error) => {
console.error(error);
event.sender.send(EVENT_KEY, { key, url, isSuccessful: false });
});
});