Puppeteer - 如何浏览大量的javascript [ed]网页?

时间:2018-01-23 14:22:14

标签: javascript node.js puppeteer

我希望使用puppeteer来浏览重度脚本网站。我已尝试过以下代码段,但由于加载后续网页之一的超时而失败。

我也尝试过包含这个参数  {waitUntil:networkidle0 / networkidle2 / load / domcontentloaded} 在page.goto()但没有成功。

该网站有很多在后台中运行的广告脚本。任何人都有任何想法?

感谢。

async function run() {
  const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
  const page = await browser.newPage();
  page.setViewport({ width: 1280, height: 2000 });
  page.on('load', () => console.log('Page loaded!', page.url()));
  //Goto website home page
  await page.goto('https://www.discuss.com.hk');
  await page.screenshot({ path: 'dis1.png' });
  //goto another page in the website
  await page.goto('http://www.discuss.com.hk/forumdisplay.php?fid=215');
  await page.screenshot({ path: 'dis2.png' });
  //Goto another page in the website
  await page.goto('http://www.discuss.com.hk/forumdisplay.php?fid=1192');
  await page.screenshot({ path: 'dis3.png' });
  //Goto  another page in the website
  await page.goto('http://www.discuss.com.hk/viewthread.php?tid=27173245&extra=page%3D1');
  await page.screenshot({ path: 'dis4.png' });
  await browser.close();
  return 'done!';
}

1 个答案:

答案 0 :(得分:1)

尝试先等待回来。我的经验法则是每当我要求新资源时(点击按钮,转到网址)我总是执行waitForSelector,在你可以使用的情况下。

await page.waitForSelector('#footer');

以下脚本可以工作并创建3个png文件: -

const puppeteer = require('puppeteer'); 

async function run() {

    const browser = await puppeteer.launch( {
        headless: false //true
    }); 

    const page = await browser.newPage(); 
    await page.setViewport({ width:1280, height:2000});

    await page.goto('https://www.discuss.com.hk');
    await page.waitForSelector('#footer');
    await page.screenshot({ path: 'dis1.png' });

    await page.goto('http://www.discuss.com.hk/forumdisplay.php?fid=215');
    await page.waitForSelector('#footer');
    await page.screenshot({ path: 'dis2.png' });

    await page.goto('http://www.discuss.com.hk/forumdisplay.php?fid=1192');
    await page.waitForSelector('#footer');
    await page.screenshot({ path: 'dis3.png' });

    await browser.close(); 
}; 

run();