【问题标题】:How to loop through open browser windows after leaving page object离开页面对象后如何循环浏览打开的浏览器窗口
【发布时间】:2021-01-31 17:29:44
【问题描述】:

我试图首先打开多个浏览器,每个浏览器都有一个页面,方法是重用一个页面对象。 然后我执行一些其他操作。 离开当前 Page 对象后,如何循环浏览这些打开的浏览器窗口? 我正在考虑拥有一组页面对象,或者为每个对象提取一些 ID 并以某种方式返回。谢谢

const puppeteer = require('puppeteer');

async function run () {
    const url = 'http://www.example.com';
    const browser = await puppeteer.launch({ headless: false });
    const defaultContext = await browser.defaultBrowserContext();
    const browserCount = 10;

    for (let i = 0; i < browserCount; i++) {
        const newContext = await browser.createIncognitoBrowserContext();
        const page = await newContext.newPage();
        await page.goto(url);

    }
    
//Perform some other tasks

//Now loop back through the 10 open browser pages.
//Go to the first open browser window, pull data from the page
//Go to the next open browser window, pull data from page

}
run();    

【问题讨论】:

  • 您已经打开了 10 个页面,但是自从您在循环的每次迭代中声明并初始化 const page 变量后,您还没有将它们存储在任何地方。因此,如果您丢失了对这些页面的引用,您将没有什么可回头的。我建议使用数组。

标签: loops object browser window puppeteer


【解决方案1】:

正如我在评论部分所说,您不会将这些打开的页面存储在任何地方,因此您无法真正返回其中任何一个。

循环应该看起来更像这样:

let pages = [];
for (let i = 0; i < browserCount; i++) {
    const newContext = await browser.createIncognitoBrowserContext();
    pages.push(await newContext.newPage());
    pages[i].goto(url);
}

// now pages.length === 10, so you can work with any of these pages
// e.g. clicking on some element on the second page:
pages[1].click('#loginForm');

【讨论】:

  • 非常感谢,我会这样做的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多