Puppeteer诡异行为之一

313次阅读
没有评论

这个诡异的行为其实就是 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的个数。

正文完
 
wujingquan
版权声明:本站原创文章,由 wujingquan 2023-10-01发表,共计770字。
转载说明:Unless otherwise specified, all articles are published by cc-4.0 protocol. Please indicate the source of reprint.
评论(没有评论)