当我使用page.todo('https://www.alipay.com/'
并听取响应事件时,请使用page.on('response', res => {console.log(res)})
,但没有回应。
但实际上加载页面时有一些http请求如下: info from chrome devTool
我应该如何获得这些要求&回应?
我注意到屏幕截图中的某些图片请求是在background-image
这样的CSS样式代码中,这些请求是否可以在事件响应下收听' ?
这是我的代码:
'use strict';
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
const iPhone = devices['iPhone 6'];
(async () => {
const browser = await initBrowser();
const page = await openPage(browser, 'https://www.alipay.com');
page.on('response', res => {
console.log('response: ', res);
});
return browser.close();
})();
async function initBrowser() {
return await puppeteer.launch({ headless: true });
}
async function openPage(browser, url) {
const page = await browser.newPage();
try {
await page.emulate(iPhone);
await page.goto(url);
} catch (e) {
console.log(e);
page.close();
return null;
}
return page;
}
答案 0 :(得分:0)
要获取网页请求,您必须将page.setRequestInterception
设置为true
。
然后在request
事件中,每个请求都会被截获,并且可以被阻止或继续。
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', interceptedRequest => {
console.log(interceptedRequest.url()); // print out the request url
interceptedRequest.continue(); // don't block the request
});
await page.goto('https://example.com');
答案 1 :(得分:0)
代码在导航到网址之前没有收听回复,page.on('request', res => console.log(res));
应该在导航到网址之前设置。
const page = await browser.newPage();
page.on('request', res => console.log(res));
page = await openPage(page, url); // <-- pass in page here instead of browser
// because page is now defined
如果上面发布的代码没有遗漏,那么在浏览器关闭之前它也没有时间查看请求。
await page.goto(url, {waitUntil: 'load'});
或者,如果在load事件被触发后还有其他请求结束,则需要找到另一种方法来等待响应。