我希望使用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!';
}
答案 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();