alm*_*arc 7 javascript node.js puppeteer
使用 puppeteer,当我输入一个值时,我会打开一个页面 - 它输出结果。
await page.click('button[class="button form-button rs-gcbalance-btn"]')
await page.waitForSelector('div[class="small-4 large-4 rs-gcbalance-result-num-col').catch(err => console.log(err))
await page.evaluate((card) => {
console.log(card + " - " + document.querySelectorAll('div[class="small-4 large-4 rs-gcbalance-result-num-col"]')[1].querySelector('span').innerHTML)
}, card)
Run Code Online (Sandbox Code Playgroud)
但是只有当输入的值有效时才能正常工作。如果不是,它会抛出一个错误,但没有任何网络活动或加载事件。
这意味着,如果值不正确,我正在等待的元素将不会出现并抛出错误,关闭程序。
Navigation Timeout Exceeded: 30000ms exceeded
Run Code Online (Sandbox Code Playgroud)
问题是:如何处理错误,所以如果它抛出超时错误,我可以捕获它并调用另一个函数?
Vic*_*tor 22
块try catch是一个解决方案。
然而,在接受的答案中,所有错误都被消除了!
您应该只捕获Puppeteer TimeOut错误。
try {
await page.waitForSelector('.foo');
} catch (e) {
if (e instanceof puppeteer.errors.TimeoutError) {
// Do something if this is a timeout.
}
}
Run Code Online (Sandbox Code Playgroud)
参考资料: https: //devdocs.io/puppeteer/
只需将其包装在try catch块中:
try {
await page.waitForSelector('#element', { timeout: 1000 });
// do what you have to do here
} catch (e) {
console.log('element probably not exists');
}
Run Code Online (Sandbox Code Playgroud)
这是一个完全有效的示例:
const puppeteer = require('puppeteer');
const html = `
<html>
<body>
<div id="element">element inner html</div>
</body>
</html>`;
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(`data:text/html,${html}`);
try {
await page.waitForSelector('#element-not-exists', { timeout: 1000 });
const element = await page.$('#element-not-exists');
console.log(await (await element.getProperty('innerHTML')).jsonValue());
} catch (e) {
console.log('element probably not exists');
}
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11885 次 |
| 最近记录: |