这个诡异的行为其实就是 target.url() 与 page.url()的区别之处。
对一站点的内容进行爬取,使用了
的类型有:background_page、browser、other、page、service_worker、shared_worker、webview
会是other类型的情况(我自己实验得知):
- 页面有iframe的。使用需要先等待一段时间执行target.url()获得url,该url是iframe的src,由此可知道iframe会触发targetcreated事件。
如果target.type是page,那么可以获取page对象,await target.page(),page.url(),获取页面url,page.url()与target.url()会存有不相同的情况,比方在page里跳转至了其他页面,如:window.location.href = ‘www.new.com’,
还有一种情况就是,直接在钩子函数里,执行 target.url(),也会有获取不到url的情况,可以现在等待一段时候才去执行 target.url()来获取url()。
诡异4
执行page.$eval无反应,
通过在执行target.page()获取page前,等待一秒种,正常了,然后对比了下正常与不正常的情况。
const p1 = new Promise((resolve => {
setTimeout(() => {
resolve()
}, 1000);
}))
await p1;
这时page.frames()有3个,page.mainFrame().url() ====’www.a.com’
成功时,pages.frames()只有1个,page.mainFrame().url() ====’www.a.com’,差别在于frames的个数。
正文完
发表至: Puppeteer
2023-10-01