I have a simple issue which I am not able to solve for last couple of days… I need to pack page on response
inside a separate function called setupRequestInterception
. When I do that the code is not working, I get a timeout.
import puppeteer from 'puppeteer';
const setupRequestInterception = async (page) => {
await page.setRequestInterception(true);
return new Promise((resolve, reject) => {
page.on('request', (request) => {
request.continue();
});
page.on('response', async (response) => {
const headers = response.headers();
resolve(headers); // Resolve the promise with the headers
});
page.on('close', () => {
reject(new Error('Page closed before headers could be intercepted.'));
});
setTimeout(() => {
reject(new Error('Timeout reached before headers could be intercepted.'));
}, 10000); // Set a timeout to prevent hanging
});
};
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
const headers = await setupRequestInterception(page);
await page.goto('https://google.com');
console.log('Intercepted Headers:', headers);
} catch (err) {
console.log('Error:', err.message);
} finally {
await browser.close();
}
})();
But when I do that like this, it works.
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
const headers = new Promise((resolve, reject) => {
page.on('response', async (response) => {
const headers = response.headers();
resolve(headers); // Resolve the promise with the headers
});
page.on('close', () => {
reject(new Error('Page closed before headers could be intercepted.'));
});
setTimeout(() => {
reject(new Error('Timeout reached before headers could be intercepted.'));
}, 10000); // Set a timeout to prevent hanging
});
await page.goto('https://google.com');
console.log('Intercepted Headers:', headers);
} catch (err) {
console.log('Error:', err.message);
} finally {
await browser.close();
}
})();
8