【发布时间】:2018-09-12 20:42:20
【问题描述】:
我有一个 puppeteer 脚本,可以将一些文本输入到字段中,提交查询并处理结果。
目前,该脚本一次只处理 1 个搜索词,但我需要它能够连续处理一组项目。
我想我只是将代码放在一个循环中(参见下面的代码),但是,它只是一次将数组中的所有项目输入到字段中,并且不会为每个搜索词执行代码块:
for (const search of searchTerms) {
await Promise.all([
page.type('input[name="q"]', 'in:spam ' + search + String.fromCharCode(13)),
page.waitForNavigation({
waitUntil: 'networkidle2'
})
]);
const count = await page.evaluate((sel) => {
return document.querySelectorAll(sel)[1].querySelectorAll('tr').length;
}, 'table[id^=":"]');
if (count > 0) {
const more = await page.$x('//span[contains(@class, "asa") and contains(@class, "bjy")]');
await more[1].click();
await page.waitFor(1250);
const markRead = await page.$x('//div[text()="Mark all as read"]');
await markRead[0].click();
const selectAll = await page.$x('//span[@role="checkbox"]');
await selectAll[1].click();
const move = await page.$x('//div[@act="8"]');
await move[0].click();
await page.waitFor(5000);
}
}
我尝试使用来自Nodejs Synchronous For each loop 的递归函数
我还尝试使用带有 yield 和 promise 的函数生成器,甚至尝试了这篇文章 Nodejs Puppeteer Wait to finish all code from loop 中 async 包中的 eachSeries 函数@
我尝试过的都没有成功。任何帮助将不胜感激,谢谢!
【问题讨论】:
-
>目前,该脚本一次只处理 1 个搜索词,但我需要它能够连续处理一组项目。你的意思是……并行?连续的意思是一个接一个,按顺序。
标签: javascript node.js automation puppeteer