为啥load事件不触发?

新手上路,请多包涵

用Puppeteer写一个爬虫demo,可是load事件一直都没有触发

const puppeteer = require('puppeteer');
const {mn} = require('./config/default');
const srcToimg = require('./helper/srcToimg');

(async () => {
  const browser = await puppeteer.launch({
    headless:false
  });
  const page = await browser.newPage();
  await page.goto('http://www.nipic.com/index.html')
  console.log('go to http://www.nipic.com/index.html');

  await page.setViewport({
    width:1920,
    height:1080
  })
  console.log('reset viewport');

  await page.focus('#sosoGuide');
  await page.keyboard.sendCharacter('猫');
  await page.click('.soso-search-submit');
  console.log('go to search list');

  //never emit!!
  page.on('load',async()=>{
    console.log('page loading done,start fetch...');

    const srcs = await page.evaluate(()=>{
      const images =document.querySelectorAll('img.lazy');
      return Array.prototype.map.call(images,img=>img.src);
    })
    console.log(`get ${srcs.length} images,start download`)
    for(let i =0;i < srcs.length;i++){
      await page.waitFor(200);
      await srcToimg(srcs[i],mn)
    }
    await browser.close();
  });
})();

控制台输出如下:

clipboard.png

阅读 3.9k
1 个回答

把监听事件注册放在goto前面

不触发的原因是因为页面已经加载完了你才注册回调

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题