[英]Node.js puppeteer - Use values from array in a loop to cycle through pages
我正在使用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'});
}
但是,如何從數組訪問值(“值”)並相應地在循環中使用它呢?
我會把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(() => {
我不確定rows
數組中的內容,因為[ RowDataPacket {
不是有效的JavaScript,但是假設這是實際數據的替代,並且每行都有一個value
屬性,則可以使用更簡單的語法:
for (const row of rows) {
await page.goto(`url/search?action=getname&name=${row.value}`);
}
如果您想每次創建一個新頁面,根據Emeeus的回答,可以將其包裝在try
/ finally
:
for (const row of rows) {
const page = await browser.newPage();
try {
await page.goto(`url/search?action=getname&name=${row.value}`);
} finally {
await page.close();
}
}
筆記:
for...of
是for
循環的現代變體。 waitUntil
默認為load
,因此您waitUntil
它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.