Я использую pupeteer для работы с безголовым хромом на nodeJS.
Я перемещаюсь по локальному веб-сайту и собираю содержимое, читаю все привязанные URL-адреса и сохраняю их содержимое в файлах.
const puppeteer = require('puppeteer');
const { URL } = require('url');
const fse = require('fs-extra');
const path = require('path');
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
//Navigate to local website
await page.goto('http://localhost:5976/',{"waitUntil": "networkidle0"});
//Gather all anchors on my webpage and save their URLs in an array
const hrefs = await page.evaluate(() => {
const anchors = document.querySelectorAll('a');
return [].map.call(anchors, a => a.href);
});
browser.close();
//Loop through all the URLs and call them
for (var i = 0; i < hrefs.length; i++) {
start(hrefs[i]);
}
})
//Function to browse URL
async function start(urlToFetch) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('response', async (response) => {
//Treat content of page
});
await page.goto(urlToFetch, {
waitUntil: 'networkidle2'
});
setTimeout(async () => {
await browser.close();
}, 60000 * 4);
}
С другой стороны, на моем локальном веб-сайте для каждая страница Я выполняю вызов AJAX на
$(window).on("beforeunload", function() {
//AJAX call
};
Я обнаружил, что если я просматриваю свой веб-сайт из браузера, этот вызов AJAX выполняется, когда я покидаю каждую страницу. Но когда я просматриваю свой веб-сайт из безголового браузера с помощью вышеуказанного кода NodeJS, вызов AJAX не вызывается
Чтобы проверить, я помещаю вызов AJAX в событие DOMContentLoaded
иэто было вызвано от безголового браузера.Так что проблема в onBeforeUnload
Возможно, в моем коде nodeJS я не закрываю каждую страницу, поэтому событие не вызывается.
Я былИнтересно, что я могу изменить событие, чтобы вызвать AJAX в последнюю очередь на странице как в безголовых браузерах, так и в обычных браузерах?
Спасибо