【发布时间】:2019-11-14 23:30:15
【问题描述】:
我正在尝试使用 Puppeteer 和 tor 包 (apt install tor) 在 TOR 网络中抓取一些网页。
可能是由于 TOR 连接的性质,有时我会超时。
另外,我是 JavaScript 异步编程的新手。
通常我有一个这样的 try-catch-construct:
await Promise.all([
page.goto(url),
page.waitForNavigation({
waitUntil: 'domcontentloaded'
}),
]).catch((err) => { logMyErrors(err, true); });
或
let langMenu = await page.waitForXPath('//*[contains(@class, ".customer_name")]/ancestor::li').catch((err) => { logMyErrors(err, true); });
但我认为通常一次或多次重试将有助于最终获得所需的资源。是否有实施重试的最佳实践?
【问题讨论】:
-
这取决于您的要求。可能是增加超时和/或在取消之前设置最大重试次数,然后在超时时重复请求(?)。所以没有法律,你必须根据你的目标/系统/资源等来决定。
-
是的,但是在多次重试的情况下,我不确定如何在不产生大量嵌套代码的情况下实现重试。还是太简单了?您将如何重试上述
let langMenuexample 3 次? -
我添加了一个答案,它有效吗?
-
我尝试将它集成到我的代码中,但未能成功。但这更可能是由于我对异步 JavaScript 编程的知识还不够。我能够整合 Thomas Dondorf 的更简洁的建议。
标签: javascript node.js async-await puppeteer tor