2 回答
TA贡献1775条经验 获得超8个赞
概括:
在您的代码中尝试增加显式等待的时间。它不会减慢您的速度,但会阻止这些异常。尝试 5 秒而不是 1 秒。试试这个
wait(driver,5)
我们使用等待是因为加载 DOM 需要时间,有时我们需要等待页面/元素加载/隐藏/更改,我们必须根据更改采取行动。
显式等待的作用是等待给定的时间来满足预期的条件,并每 500 毫秒检查一次条件是否满足。这样,在执行下一个任务之前,您最多会损失 500 毫秒的时间。如果条件没有及时满足,就会抛出超时异常。显式等待并不能解决您的所有问题。
您仍然需要检查可能的异常并决定发生这种情况时要做什么。有些网站加载速度很慢,或者您的带宽有时很低。那么你就没有办法加快这个过程了。
您必须首先分析页面并确定会发生什么。如果您正在等待某个元素存在但有可能它可能不存在,那么您应该相应地处理异常。
如果您正在检查页面中是否存在元素,那么最好不要等待元素,而是尝试使用find_elements_
并检查列表的大小。这样你就可以避免异常并且会更快。
driver.find_elements(By.ID, "locator").size()>0
TA贡献1946条经验 获得超4个赞
是的,显式等待(webdriver wait)解决了这个问题。其他简单的方法是创建一个带有时间秒数的 for 循环并在循环内写入 find 元素,因此即使失败,它也会检查 180 秒并写入超出预期等待时间的条件
for (int second = 0; second < 60; second++) {
try {}
catch (WebDriverException we)
{}
if (second >= 60) {
//write failure
}
添加回答
举报