F95API/app/scripts/puppeteer-helper.js

61 lines
1.8 KiB
JavaScript
Raw Normal View History

2020-10-16 07:58:08 +00:00
'use strict';
// Public modules from npm
2020-10-16 07:58:08 +00:00
const puppeteer = require('puppeteer');
// Modules from file
2020-10-16 07:58:08 +00:00
const shared = require('./shared.js');
/**
* @protected
* Create a Chromium instance used to navigate with Puppeteer.
* By default the browser is headless.
* @returns {Promise<puppeteer.Browser>} Created browser
*/
module.exports.prepareBrowser = async function () {
// Create a headless browser
2020-10-14 13:12:35 +00:00
let browser = null;
if (shared.chromiumLocalPath) {
browser = await puppeteer.launch({
executablePath: shared.chromiumLocalPath,
2020-10-16 08:05:28 +00:00
headless: !shared.debug // Use GUI when debug = true
2020-10-14 13:12:35 +00:00
});
} else {
browser = await puppeteer.launch({
2020-10-16 08:05:28 +00:00
headless: !shared.debug // Use GUI when debug = true
2020-10-14 13:12:35 +00:00
});
}
return browser;
};
/**
* @protected
* Prepare a page used to navigate the browser.
* The page is set up to reject image download requests. The user agent is also changed.
* @param {puppeteer.Browser} browser Browser to use when navigating where the page will be created
* @returns {Promise<puppeteer.Page>} New page
*/
module.exports.preparePage = async function (browser) {
// Create new page in the browser argument
2020-10-16 07:21:19 +00:00
const page = await browser.newPage();
// Block image download
await page.setRequestInterception(true);
2020-10-16 07:58:08 +00:00
page.on('request', (request) => {
if (request.resourceType() === 'image') request.abort();
else if (request.resourceType === 'font') request.abort();
// else if (request.resourceType() == 'stylesheet') request.abort();
// else if(request.resourceType == 'media') request.abort();
else request.continue();
});
// Set custom user-agent
2020-10-16 07:21:19 +00:00
const userAgent =
2020-10-16 07:58:08 +00:00
'Mozilla/5.0 (X11; Linux x86_64)' +
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36';
await page.setUserAgent(userAgent);
return page;
};