From edbc553b454cce19466c522a49f4d519856066a3 Mon Sep 17 00:00:00 2001 From: Elbert Alias <77259+AliasIO@users.noreply.github.com> Date: Wed, 8 Jan 2020 15:13:15 +1100 Subject: [PATCH] Improved error handling in NPM driver with puppeteer --- src/drivers/npm/browsers/puppeteer.js | 55 +++++++++++++-------------- src/drivers/npm/package.json | 2 +- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/src/drivers/npm/browsers/puppeteer.js b/src/drivers/npm/browsers/puppeteer.js index fba073d49..f96a21af7 100644 --- a/src/drivers/npm/browsers/puppeteer.js +++ b/src/drivers/npm/browsers/puppeteer.js @@ -46,44 +46,43 @@ class PuppeteerBrowser extends Browser { } async visit(url) { - const browser = await this.browser(); + try { + const browser = await this.browser(); - const page = await browser.newPage(); + const page = await browser.newPage(); - await page.setRequestInterception(true); + page.setDefaultTimeout(this.options.maxWait); - page.on('request', request => request.continue()); + await page.setRequestInterception(true); - page.on('response', (response) => { - if (response.status() === 301 || response.status() === 302) { - return; - } + page.on('request', request => request.continue()); - if (!this.statusCode) { - this.statusCode = response.status(); + page.on('response', (response) => { + if (response.status() === 301 || response.status() === 302) { + return; + } - this.headers = {}; + if (!this.statusCode) { + this.statusCode = response.status(); - const headers = response.headers(); + this.headers = {}; - Object.keys(headers).forEach((key) => { - this.headers[key] = Array.isArray(headers[key]) ? headers[key] : [headers[key]]; - }); + const headers = response.headers(); - this.contentType = headers['content-type'] || null; - } - }); + Object.keys(headers).forEach((key) => { + this.headers[key] = Array.isArray(headers[key]) ? headers[key] : [headers[key]]; + }); - page.on('console', ({ _type, _text, _location }) => this.log(`${_text} (${_location.url}: ${_location.lineNumber})`, _type)); + this.contentType = headers['content-type'] || null; + } + }); - await page.setUserAgent(this.options.userAgent); + page.on('console', ({ _type, _text, _location }) => this.log(`${_text} (${_location.url}: ${_location.lineNumber})`, _type)); + + await page.setUserAgent(this.options.userAgent); - try { await Promise.race([ - page.goto(url, { - timeout: this.options.maxWait, - waitUntil: 'networkidle2', - }), + page.goto(url, { waitUntil: 'networkidle2' }), new Promise(resolve => setTimeout(resolve, this.options.maxWait)), ]); @@ -117,13 +116,11 @@ class PuppeteerBrowser extends Browser { })); this.html = await page.content(); + + await page.close(); } catch (error) { throw new Error(error.toString()); } - - await page.close(); - - this.page = null; } } diff --git a/src/drivers/npm/package.json b/src/drivers/npm/package.json index 0a87afa83..4f9c75ea3 100644 --- a/src/drivers/npm/package.json +++ b/src/drivers/npm/package.json @@ -2,7 +2,7 @@ "name": "wappalyzer", "description": "Uncovers the technologies used on websites", "homepage": "https://github.com/AliasIO/Wappalyzer", - "version": "5.9.5", + "version": "5.9.6", "author": "Elbert Alias", "license": "GPL-3.0", "repository": {