11const puppeteer = require ( 'puppeteer' ) ;
22
33var browser = null ;
4- module . exports . screnshotForUrlTab = async function ( url , isfullPage , resX , resY , outFormat , waitTime ) {
4+ module . exports . screnshotForUrlTab = async function ( url , isfullPage , resX , resY , outFormat , waitTime , proxy_server ) {
55 return new Promise ( async function ( resolve , reject ) {
66
77 try {
@@ -18,10 +18,25 @@ module.exports.screnshotForUrlTab = async function (url, isfullPage, resX, resY,
1818 var buffer = null ;
1919 try {
2020
21+ var args = [
22+ '--no-sandbox' ,
23+ '--font-render-hinting=none' ,
24+ '--force-color-profile=srgb'
25+ ]
26+
27+ if ( proxy_server != null ) {
28+ args . push ( `--proxy-server=${ proxy_server } ` )
29+ args . push ( '--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE proxyhost"' , )
30+ }
2131 if ( browser == null ) {
22- browser = await puppeteer . launch ( { headless : true , args : [ '--no-sandbox' , '--font-render-hinting=none' , '--force-color-profile=srgb' ] } ) ;
32+ browser = await puppeteer . launch (
33+ {
34+ headless : true ,
35+ args : args
36+ }
37+ ) ;
2338 }
24-
39+
2540 //const browser = await puppeteer.launch({args: ['--no-sandbox']});
2641 const page = await browser . newPage ( ) ;
2742 await page . setUserAgent ( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36" ) ;
@@ -38,13 +53,13 @@ module.exports.screnshotForUrlTab = async function (url, isfullPage, resX, resY,
3853 if ( isfullPage ) {
3954 await autoScroll ( page ) ;
4055 }
41-
56+
4257 //wait for the page to be fully loaded - max 1000ms wait
4358 try {
4459 await page . waitForNavigation ( { waitUntil : 'networkidle2' , timeout : waitTime } ) ;
4560 } catch ( ex ) {
4661 }
47-
62+
4863 var finalType = "jpg" ;
4964 var finalMime = "image/jpeg" ;
5065
@@ -61,8 +76,8 @@ module.exports.screnshotForUrlTab = async function (url, isfullPage, resX, resY,
6176 finalMime = "application/pdf" ;
6277 }
6378
64- var optionsPup = {
65- type : finalType ,
79+ var optionsPup = {
80+ type : finalType ,
6681 encoding : 'binary' ,
6782 fullPage : isfullPage
6883 } ;
@@ -77,18 +92,18 @@ module.exports.screnshotForUrlTab = async function (url, isfullPage, resX, resY,
7792 else {
7893 buffer = await page . pdf ( { printBackground : true , scale : 1 , format : 'A4' } ) ;
7994 }
80-
95+
8196 //await browser.close();
8297 await page . close ( ) ;
8398
84- let mimeType = finalMime ;
99+ let mimeType = finalMime ;
85100 var resp = {
86101 mimeType : mimeType ,
87102 data : buffer
88103 } ;
89104
90105 resolve ( resp ) ;
91-
106+
92107 }
93108 catch ( ex ) {
94109 console . log ( "Error while taking screenshot: " + ex . message ) ;
@@ -144,11 +159,11 @@ module.exports.screnshotForUrl = async function (url, isfullPage, resX, resY, ou
144159
145160 var errorContent = "" ;
146161 await page . goto ( url ) . catch ( e => errorContent = e ) ;
147-
162+
148163 //display error in the image
149164 if ( errorContent != "" ) {
150165 page . setContent ( "<pre>" + errorContent . stack + "</pre>" ) ;
151- }
166+ }
152167
153168 await page . setViewport ( {
154169 width : parseInt ( resX ) ,
@@ -166,7 +181,7 @@ module.exports.screnshotForUrl = async function (url, isfullPage, resX, resY, ou
166181 } catch ( ex ) {
167182
168183 }
169-
184+
170185 var finalType = "jpg" ;
171186 var finalMime = "image/jpeg" ;
172187
@@ -183,22 +198,22 @@ module.exports.screnshotForUrl = async function (url, isfullPage, resX, resY, ou
183198 finalMime = "application/pdf" ;
184199 }
185200
186- buffer = await page . screenshot ( {
187- type : finalType ,
188- quality : 84 ,
201+ buffer = await page . screenshot ( {
202+ type : finalType ,
203+ quality : 84 ,
189204 encoding : 'binary' ,
190205 fullPage : isfullPage
191206 } ) ;
192207 await browser . close ( ) ;
193208
194- let mimeType = finalMime ;
209+ let mimeType = finalMime ;
195210 var resp = {
196211 mimeType : mimeType ,
197212 data : buffer
198213 } ;
199214
200215 resolve ( resp ) ;
201-
216+
202217 }
203218 catch ( ex ) {
204219 console . log ( "Error while taking screenshot: " + ex . message ) ;
@@ -243,4 +258,4 @@ module.exports.sleep = function (ms) {
243258 return new Promise ( ( resolve ) => {
244259 setTimeout ( resolve , ms ) ;
245260 } ) ;
246- }
261+ }
0 commit comments