木偶:如何拦截多个“页面”中的请求?

时间:2019-08-26 19:56:43

标签: javascript node.js puppeteer

我正在尝试从一个页面上下载PDF,而单个页面上有多个PDF链接。第一个问题是,在单击()-链接时,它会自动调出新的标签页或页面。我已经对此进行了大量研究-而且行为似乎是固有的-并且无法更改。因此,我要在所有这些内容中进行缓冲的下一个方法是设置一个请求拦截器,以接收每个相似的请求(URL参数发生变化的除外)并使用浏览器cookie-复制请求并使用其他请求库发送

这使我想到了主要问题-在创建新页面时,将每个页面设置为基本上“钩住”到我的请求拦截器中的最佳方法是什么?我已经查看了从首页发出的请求-似乎是在发送请求的“新”标签中。

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:4)

您可以使用浏览器发出的targetcreated事件。

您要知道的一件事是,尽管将创建一个新目标,但PDF查看器(如果有)将打开PDF。您将无法evaluatescreenshotpdf该目标。

const browser =  await puppeteer.launch({ headless: false});
const page = await browser.newPage();

browser.on('targetcreated', e => {
    console.log(e.url());
});

await page.goto("https://codepen.io/hardkoded/pen/gOYmVww");
const frameEl = await page.$("#result");
const frame = await frameEl.contentFrame();
await frame.click("a");