From 125f5d5d8b91cc470dae947b6d977ba2ac085dc9 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Tue, 27 Jun 2023 21:46:56 +0200 Subject: [PATCH] fix(goto): check page state before intercept otherwise, a `Protocol error (Fetch.enable): Session closed. Most likely the page has been closed.` sync error is emitted --- packages/browserless/src/index.js | 3 +-- packages/goto/src/index.js | 2 +- packages/goto/test/index.js | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/browserless/src/index.js b/packages/browserless/src/index.js index c8ac10f5a8..f9d1b24861 100644 --- a/packages/browserless/src/index.js +++ b/packages/browserless/src/index.js @@ -118,7 +118,6 @@ module.exports = ({ timeout: globalTimeout = 30000, ...launchOpts } = {}) => { try { page = await createPage(args) setTimeout(() => closePage(page), timeout).unref() - const value = await fn(page, goto)(...args) await closePage(page) return value @@ -153,7 +152,7 @@ module.exports = ({ timeout: globalTimeout = 30000, ...launchOpts } = {}) => { const evaluate = (fn, gotoOpts) => withPage( - page => async (url, opts) => { + (page, goto) => async (url, opts) => { const { response, error } = await goto(page, { url, ...gotoOpts, ...opts }) return fn(page, response, error) }, diff --git a/packages/goto/src/index.js b/packages/goto/src/index.js index 55b3025fdd..46208a578c 100644 --- a/packages/goto/src/index.js +++ b/packages/goto/src/index.js @@ -249,7 +249,7 @@ module.exports = ({ } const enableInterception = - (onPageRequest || abortTypes.length > 0) && page.setRequestInterception(true) + (onPageRequest || abortTypes.length > 0) && run({ fn: page.setRequestInterception(true), debug: 'enableInterception' }) if (onPageRequest) { Promise.resolve(enableInterception).then(() => page.on('request', onPageRequest)) diff --git a/packages/goto/test/index.js b/packages/goto/test/index.js index 0fcc59c745..7f0cc95abd 100644 --- a/packages/goto/test/index.js +++ b/packages/goto/test/index.js @@ -40,3 +40,24 @@ test('setup `styles`', async t => { t.is(style, '"Helvetica Neue", Helvetica, Arial, sans-serif') }) + +test('handle page disconnections', async t => { + t.plan(1) + const browserless = await getBrowserContext(t, { retry: 0 }) + const onPageRequest = req => { + console.log('req.url', req.url) + } + const intercept = browserless.withPage((page, goto) => async url => { + await page.close() + + const result = await goto(page, { + url, + onPageRequest, + abortTypes: ['image', 'stylesheet', 'font'] + }) + + t.deepEqual(Object.keys(result), ['response', 'device', 'error']) + }) + + await intercept('chrome://version') +})