Puppeteer 获取请求重定向
Puppeteer get request redirects
有什么方法可以使用 puppeteer
通过请求的响应正文(如果有的话)获取重定向?
我实现了以下代码,但找不到获取重定向的方法...
const page = await browser.newPage()
page.on('request', (data) => console.log(data));
await page.on('response', response => {
const url = response.url();
response.buffer()
.then (
buffer => {
bufferString = buffer.toString();
},
error => {
console.log(error)
}
)
})
await page.goto('https://www.ford.com', {waitUntil: 'networkidle0'});
只需检查 response
处理程序中的 response.status()
- 重定向为 3xx:
page.on('response', response => {
const status = response.status()
if ((status >= 300) && (status <= 399)) {
console.log('Redirect from', response.url(), 'to', response.headers()['location'])
}
})
(重定向在响应主体中通常没有任何有趣的内容,因此您可能不想为它们调用 response.buffer()
。)
这应该适用于每种类型的重定向:server-side 和 client-side(meta-refresh、JS 等)
const page = await browser.newPage()
const redirects = [];
const client = await page.target().createCDPSession();
await client.send('Network.enable');
await client.on('Network.requestWillBeSent', (e) => {
if (e.type !== "Document") {
return;
}
redirects.push(e.documentURL);
});
await page.goto('https://www.ford.com');
await page.waitForNavigation();
console.log(redirects);
类似的东西。
您需要检查响应 url,因为在重定向的情况下,可能会调用多个 URL,我认为只有第一个是 301。
请注意,我的代码中的 expect
来自 chai
库,但这是可选的,断言可以通过其他方式完成。
const webpage = await browser.newPage();
webpage.once('response', response => {
if (response.url() === 'https://www.ford.com') {
expect(response.status()).equals(301);
}
})
await webpage.goto('https://www.ford.com');
有什么方法可以使用 puppeteer
通过请求的响应正文(如果有的话)获取重定向?
我实现了以下代码,但找不到获取重定向的方法...
const page = await browser.newPage()
page.on('request', (data) => console.log(data));
await page.on('response', response => {
const url = response.url();
response.buffer()
.then (
buffer => {
bufferString = buffer.toString();
},
error => {
console.log(error)
}
)
})
await page.goto('https://www.ford.com', {waitUntil: 'networkidle0'});
只需检查 response
处理程序中的 response.status()
- 重定向为 3xx:
page.on('response', response => {
const status = response.status()
if ((status >= 300) && (status <= 399)) {
console.log('Redirect from', response.url(), 'to', response.headers()['location'])
}
})
(重定向在响应主体中通常没有任何有趣的内容,因此您可能不想为它们调用 response.buffer()
。)
这应该适用于每种类型的重定向:server-side 和 client-side(meta-refresh、JS 等)
const page = await browser.newPage()
const redirects = [];
const client = await page.target().createCDPSession();
await client.send('Network.enable');
await client.on('Network.requestWillBeSent', (e) => {
if (e.type !== "Document") {
return;
}
redirects.push(e.documentURL);
});
await page.goto('https://www.ford.com');
await page.waitForNavigation();
console.log(redirects);
类似的东西。
您需要检查响应 url,因为在重定向的情况下,可能会调用多个 URL,我认为只有第一个是 301。
请注意,我的代码中的 expect
来自 chai
库,但这是可选的,断言可以通过其他方式完成。
const webpage = await browser.newPage();
webpage.once('response', response => {
if (response.url() === 'https://www.ford.com') {
expect(response.status()).equals(301);
}
})
await webpage.goto('https://www.ford.com');