【发布时间】:2020-05-19 17:09:22
【问题描述】:
我的任务是提交不同数据的表单。所以,我正在使用 puppeteer 和 for of 循环。
代码示例:
const puppeteer = require('puppeteer')
const data = require('data.json') // ~30 products
(async () => {
try {
const browser = await puppeteer.launch({
headless: false,
ignoreHTTPSErrors: true,
defaultViewport: null,
});
const page2 = await browser.newPage();
await page2.goTo('mywebsite', {waitUntil: 'domcontentloaded'} )
for (let product of data) {
// Waiting for some selector, after that do something with it
await page2.waitForSelector("#someSelector", { visible: true });
await page2.type("#someSelector", product.someData);
//
//... A lot of code that similar to above is here
//
// Go back after all things done
await page2.waitFor(2000);
await page2.waitForSelector('[title="home"]', { visible: true });
await page2.click('[title="home"]', { clickCount: 1 });
counter++;
console.log(
`===========================================================================${counter}`
);
}
} catch (err) {
throw new Error(err);
}
})();
问题是这行得通,但并不总是行得通,例如,一个循环可以工作15次,然后脱落或经历一个完整的循环没有失败。
错误总是一样的:
UnhandledPromiseRejectionWarning:错误:TimeoutError:等待选择器“#someSelector”失败:超过超时 30000 毫秒
但是,如果我检查页面,那么一切都在那里,元素在页面上,但 puppeteer 看不到它们。我该如何解决这个问题?
【问题讨论】:
标签: node.js async-await puppeteer