source-scraper-puppeteer-runner
Version:
Provides the PuppeteerRunner class for scrapping.
57 lines • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const source_scraper_core_1 = require("source-scraper-core");
const puppeteer_1 = require("puppeteer");
class PuppeteerRunner extends source_scraper_core_1.Runner {
constructor() {
super(...arguments);
this.defaultOptions = {
puppeteerConfig: {
headless: true
},
requestInterceptors: [
({ resourceType }) => resourceType === 'font'
]
};
}
async exec(url, scraper, options) {
const { puppeteerConfig, requestInterceptors, init, navigationOptions } = options;
const browser = await puppeteer_1.launch(puppeteerConfig);
const page = await browser.newPage();
await page.emulateMedia('screen');
const requestInterceptionEnabled = Array.isArray(requestInterceptors) && requestInterceptors.length > 0;
await page.setRequestInterception(requestInterceptionEnabled);
if (requestInterceptionEnabled)
page.on('request', (request) => {
const block = requestInterceptors.some(e => e({
browser,
page,
request,
resourceType: request.resourceType(),
url: request.url()
}));
if (block)
request.abort();
else
request.continue();
});
if (typeof init !== 'undefined')
init({
browser,
page
});
await page.goto(url, navigationOptions);
try {
return await scraper({
url,
browser,
page
});
}
finally {
await browser.close();
}
}
}
exports.PuppeteerRunner = PuppeteerRunner;
//# sourceMappingURL=PuppeteerRunner.js.map