puppeteer打开新页面时page实例的转换

当我们使用page来获取一个页面的实例的时候,如果tab一直没有切换的话,一直使用page是没有问题的
但是,如果一个页面打开了一个新的链接的时候,还是用之前的page,就会发生获取不到新页面的元素的情况,因为你的page不一样,所以这个时候就要切换page

方案:

  1. 1.browser.pages()可以获取所有打开的Page对象,可以通过遍历或筛选找到自己想获取的Page对象

    //获取地址为‘http://woleigequ.net/’的Page对象
    let pageList = await browser.pages();
    let newPage = pageList.filter(item=>item.url() == 'http://woleigequ.net/')[0]
    

    这种情况, 你也可以选择使用pageList[2]之类的获取当前页面数组的第一个元素来获取新的页面的实例

  2. 通过browser.waitForTarget获取target

    //获取地址为‘http://woleigequ.net/’的Page对象
    const target = await browser.waitForTarget(t=>t.url() == 'http://woleigequ.net/')
    const newPage = await target.page();
    
  3. browser.on(‘targetcreated’)

    await page.goto('woleigequ.net');               // 打开woleigequ.net      
    await page.waitForSelector('#goto');            // 等待并获取点击跳转的goto元素
    const link = await page.$('#goto');
    const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page())));    		// 声明变量
    await link.click();                             // 点击跳转
    const newPage = await newPagePromise;           // newPage就是a链接打开窗口的Page对象               
    
发布了62 篇原创文章 · 获赞 1 · 访问量 1313

猜你喜欢

转载自blog.csdn.net/qq_43382853/article/details/103661429