在使用puppeteer 跳转窗口的时候,发现waitForNavigator 并不起作用,最后找到通过browser 获得page 并继续操作。
看官网API 说在click 的时候通常与waitForNavigator
一起用,最后怎么都获取不到页面并拿到截图。
最初想做的很简单,比如说:登录百度,然后输入关键词,然后找到第几个链接,点击打开新页面,等待一会再关闭。
OK,就这么简单,中间夹杂着几个截图看效果,但是按照我之前使用waitForNavigator
死活拿不到。
那么像这种新开窗口的怎么处理呢?
干货在此.. 算不上干货..都不敢写大字了
let url = 'http://www.baidu.com';
const chalk = require('chalk');
const puppeteer = require('puppeteer');
async function go(){
console.log(chalk.green(`创建浏览器`));
const browser = await puppeteer.launch({
executablePath : 'C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chrome.exe',
defaultViewport : {
width : 1920,
height : 1080
}
});
const page = await browser.newPage();
console.log(`跳转页面:${url}`)
await page.goto(url);
console.log(`输入关键词`)
await page.type('[name="wd"]','自动抓站',{delay : 100});
await page.click('#su');
await page.waitFor('.result.c-container:nth-child(1)>h3>a');
console.log(`点击第10个地址`)
await page.click('.result.c-container:nth-child(1)>h3>a');
await page.waitFor(5000);
//此处为重点。
const pages = await browser.pages();
const newPage = pages[2];
let title = await newPage.title();
if(title.indexOf('集散地') < 0){
console.log(chalk.red(`error:页面位置有变化。`));
}
console.log(`页面:${title}`)
let delayTime = Math.random() * 40000;
await newPage.waitFor(delayTime);
await browser.close();
let awaitTime = Math.random() * 20000;
console.log(`time : ${awaitTime}`);
setTimeout(function(){
go();
},awaitTime);
}
go();
前面的跳转啊.. 输入啊 ,官网文档上都有例子,还好说,后面的获取page 我愣是没找到. 这里mark下。
转载请注明出处: https://chrunlee.cn/article/nodejs-puppeteer-pages.html