Selenium Webdriver:等待超时异常的回退?



我目前正在使用Selenium WebDriver(通过node.js运行)来抓取分散在几十年的一堆天气数据(因为该站点在我期望的全分辨率下每页只加载一天的数据!)因此,该过程的一个组成部分包括在url之间跳转,等待为每个相应日期的页面加载适当的数据表(如果适用)。

虽然我目前的方法适用于绝大多数页面,使用显式等待方法await driver.wait( until.elementsLocated( By.css( #myDataTableOfInterest)), 10000),但偶尔会有没有可用数据的时期(网站完全省略了表元素),因此也会在我的scraper上触发TimeOut错误(因为显然找不到不存在的表!),不幸的是也会停止我的整个程序。

我认为一定有一些相当标准的回退内置到Selenium的等待方法,让您运行替代代码(或简单地移动到测试的其余部分-也许有一些日志),如果预期的条件没有在指定的等待时间之后实现?

我最初的想法是通过附加.then(<some empty/log function>,error => {continue})来绕过它(因为这段代码发生在迭代更新日URL的循环中),但似乎"如果操作嵌套在循环内的函数中,则该操作无效。

try {
await driver.wait( until.elementsLocated(By.css( #myDataTableOfInterest)), 10000);
}
catch (e) {
console.log('Element not found');
}

你可以尝试捕获错误并做任何你想做的处理。

最新更新