Devtools协议中的framenavigated
事件似乎与Puppeteer中的framenavigated
事件的工作方式不同。如果我在下面的Puppeteer示例中使用parentframe
方法,我只得到客户端导航重定向,这是我想要的。如果我使用Devtools协议示例将parentframe
方法替换为parentId
我没有得到任何结果,因为代码没有超过parentId
。
如何在Devtools协议中使用framenavigated
事件的行为方式与Puppeteer framenavigated
相同,并且只获取导航重定向链?
// var url = "http://wechat.com";
var url = "http://yahoo.com";
const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
// Puppeteer framenavigated example:
page.on('framenavigated', frame => {
if(frame.parentFrame() === null) {
console.log("Puppeteer nav frame: ");
console.log(frame._url);
}
});
// Result returns:
// Puppeteer nav frame:
// https://uk.yahoo.com/?p=us
// Devtools protocol framenavigated example:
const client = await page.target().createCDPSession();
await client.send('Page.enable');
await client.on('Page.frameNavigated', (e) => {
// console.log("Framenavigated event fired");
if(e.frame.parentId === null) {
console.log("Devtools protocol frame: ");
console.log(e.frame.url);
}
});
// Result returns:
// Either hangs up and times out or finishes but returns nothing
await page.goto(url);
await browser.close();
});
答案 0 :(得分:0)
再看看这个并找出问题所以我会回答我自己的问题。
Puppeteer中的parentFrame()
方法返回null
作为页面主框架的一部分的框架,但Devtools protcol中的parentId返回undefined
作为主框架。因此,我只需要检查undefined
或false
parentId
值。很明显我知道@@。
await client.on('Page.frameNavigated', (e) => {
if(!e.frame.parentId) {
// if(typeof e.frame.parentId === "undefined") { // works also
console.log(e.frame.url);
}
});