Puppeteer 从 pdf 下载中获得响应 link
Puppeteer getting response from pdf download link
我正在对网站进行自动化回归测试,其中一项任务是验证 pdf 下载。为此,我正在使用 Puppeteer 和 Chromium。我发现在无头模式下下载文件相当困难。与其下载文件,我认为寻找页面的响应和文件的大小可能是谨慎的做法。我的问题:当我尝试导航到该页面时,似乎没有任何反应。我收到超时错误。这是我尝试使用的代码:
const filename = new RegExp('\S*(\.pdf)');
await page.waitForSelector('#download-pdf', {timeout: timeout});
console.log('Clicking on "Download PDF" button');
const link = await page.$eval('#download-pdf', el => el.href);
await Promise.all([
page.goto(link),
page.on('response', response => {
if(response._headers['content-disposition'] === `attachment;filename=${filename}`){
console.log('Size: ', response._headers['content-length']);
}
})
]);
编辑
如果有人了解 page.goto()
如何忽略 .pdf
页面,那将对我非常有用。
让我更好地定义问题。单击网页上的 download pdf
按钮后,将触发生成 pdf 文件并向用户发送唯一的 url 的事件。这个 url 在短时间后被销毁。为了达到这一点,我相信我必须使用page.click()
来触发事件并生成url。然而,page.click()
也试图导航到 pdf url,这在无头模式下被拒绝。我需要做的是获取 url 并测试它的响应。
我找到了解决办法。我会 post 在这里为未来几天遇到类似问题的任何其他人提供。这里的想法是创建一个事件侦听器来侦听所有响应。因为我只关心以 .pdf
结尾的页面的回复,所以我只对这些回复采取行动。
page.on('response', intercept=>{
if(intercept.url().endsWith('.pdf')){
console.log(intercept.url());
console.log('HTTP status code: %d', intercept.status());
console.log(intercept.headers());
}
});
我正在对网站进行自动化回归测试,其中一项任务是验证 pdf 下载。为此,我正在使用 Puppeteer 和 Chromium。我发现在无头模式下下载文件相当困难。与其下载文件,我认为寻找页面的响应和文件的大小可能是谨慎的做法。我的问题:当我尝试导航到该页面时,似乎没有任何反应。我收到超时错误。这是我尝试使用的代码:
const filename = new RegExp('\S*(\.pdf)');
await page.waitForSelector('#download-pdf', {timeout: timeout});
console.log('Clicking on "Download PDF" button');
const link = await page.$eval('#download-pdf', el => el.href);
await Promise.all([
page.goto(link),
page.on('response', response => {
if(response._headers['content-disposition'] === `attachment;filename=${filename}`){
console.log('Size: ', response._headers['content-length']);
}
})
]);
编辑
如果有人了解 page.goto()
如何忽略 .pdf
页面,那将对我非常有用。
让我更好地定义问题。单击网页上的 download pdf
按钮后,将触发生成 pdf 文件并向用户发送唯一的 url 的事件。这个 url 在短时间后被销毁。为了达到这一点,我相信我必须使用page.click()
来触发事件并生成url。然而,page.click()
也试图导航到 pdf url,这在无头模式下被拒绝。我需要做的是获取 url 并测试它的响应。
我找到了解决办法。我会 post 在这里为未来几天遇到类似问题的任何其他人提供。这里的想法是创建一个事件侦听器来侦听所有响应。因为我只关心以 .pdf
结尾的页面的回复,所以我只对这些回复采取行动。
page.on('response', intercept=>{
if(intercept.url().endsWith('.pdf')){
console.log(intercept.url());
console.log('HTTP status code: %d', intercept.status());
console.log(intercept.headers());
}
});