puppeteer waitForNavigator 不起作用,多窗口的切换

puppeteer waitForNavigator 不起作用,多窗口的切换

月光魔力鸭

2019-06-21 13:33 阅读 1985 喜欢 1 puppeteer 多窗口 waitForNavigator

在使用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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
使用nodejs连接ftp,进行ftp的操作,包括列表、上传、下载以及速率等。
thinkjs框架使用ueditor记录。
分享一个自动抓取静态站资源的小工具,可以在抓取某个静态站点的时候方便很多,尤其是如果页面比较多的话,会很难受,而且会自动将资源进行归类,如果一个页面一个页面的保存的话,那就比较费劲了。
在公司报销的时候虽然已经有了电子发票,但是贴票还是需要将发票打印出来贴上,如果只有一两张也就算了,如果几十张.. 呵呵,光胶水我都不够用的,找了好多工具、在线版本都不合心意,烦死,自己做个自己喜欢的吧。
从豆瓣转到网易云后,发现了不少好听的歌曲,然鹅..当我想把这些歌拿下来扔车上听的时候发现竟然不允许下载..能听不能下?这不科学,作为一名程序猿,必然要迎难而上啊.
最近在折腾的时候又想写less了,但是换框架了,成了thinkjs,考虑到开发阶段一直编译编译less的情况..最终根据middleware的特点实现了一个超级简单的less中间件。
因为自己的记录笔记的应用是有道云,又想着把有道云跟自己的小网站联通起来,所以查找了有道云的,然后实现了nodejs版本的sdk.
目前了解的有两个模块可以实现二维码的模块,一个是node-qrcode ,这个算是比较大众的,不过环境比较复杂,所以...连看都没看;还有一个是小众的 qr-image ,这个比较简单,没有其他环境依赖,安装即可用,因为要实现一个简单的在线二维码生成,就先用这个试试水了