Node.js puppeteer-在循环中使用数组中的值来循环浏览页面

时间:2018-08-29 17:30:08

标签: javascript arrays node.js puppeteer

我正在使用node.js和puppeteer来获取一些数据。 ...现在我想根据数组中的不规则值访问不同的页面:

我的数组如下:

rows = [ RowDataPacket {
            id: 1,
            value: 'L3',
            name: 'Steve' },
        RowDataPacket {
            id: 2,
            value: 'GU',
            name: 'Peter' },        
        RowDataPacket {
            id: 3,
            value: 'M5',
            name: 'John' }]

所以我要访问的页面是:

await page.goto('url/search?action=getname&name=L3', {waitUntil: 'load'});  
await page.goto('url/search?action=getname&name=GU', {waitUntil: 'load'});  
await page.goto('url/search?action=getname&name=M5', {waitUntil: 'load'});

该数组实际上是200个值长...所以我想到做这样的循环:

await page.goto('url', {waitUntil: 'load'});

rows = [ RowDataPacket {
            id: 1,
            value: 'L3',
            name: 'Steve' },
        RowDataPacket {
            id: 2,
            value: 'GU',
            name: 'Peter' },        
        RowDataPacket {
            id: 3,
            value: 'M5',
            name: 'John' }]

console.log(rows.length); // 3

for (let i=1; i < rows.length; i++){

    await page.goto('url/search?action=getname&name='+value, {waitUntil: 'load'});  

}

但是我如何从数组访问值(“值”)并相应地在循环中使用它呢?

2 个答案:

答案 0 :(得分:0)

我会将browser.newPage();放入循环中,如下所示:

const page = []

    for (let i=1; i < rows.length; i++){

        page[i] = await browser.newPage();
        await  page[i].goto('url/search?action='+rows[i].name+'&name='+rows[i].value, {waitUntil: 'load'});

    }

然后,以相同或其他方式出现:

const newPage = await page[i].evaluate(() => {

答案 1 :(得分:0)

我不确定rows数组中的内容,因为[ RowDataPacket {不是有效的JavaScript,但是假设这是实际数据的替代,并且每一行都有一个{{1} }属性,可以使用更简单的语法:

value

如果您想每次创建一个新页面,请根据Emeeus的答案将其包装在for (const row of rows) { await page.goto(`url/search?action=getname&name=${row.value}`); } / try中:

finally

注意:

  • for...offor (const row of rows) { const page = await browser.newPage(); try { await page.goto(`url/search?action=getname&name=${row.value}`); } finally { await page.close(); } } 循环的现代变体。
  • 以反引号开头的代码为a template literal,可避免级联。
  • waitUntil defaults to load,因此您可以忽略它。