【发布时间】:2018-06-23 02:26:07
【问题描述】:
我使用 Selenium 和 Python 来解析来自数据库站点的搜索结果。搜索输出是动态的,因此,当我输入新请求时,页面不会重新加载,但搜索结果是新的。
问题是 Selenium 不更新 WebDriver DOM 数据,所以下次我尝试像 driver.find_elements_by_class_name('query_header') 这样的东西时,我会收到来自先前搜索请求和 StaleError 的元素。
使用WebDriverWait(driver, timeout).until(element_present) 没有帮助。元素在那里(所有搜索结果块都有相同的类、名称等)。但它们很旧:)
我通过在每次请求后使用driver.refresh() 重新加载页面来修复它,但它看起来有点不自然 + 双重请求。
有什么方法可以刷新 Selenium DOM 数据,所以我会在不重新加载页面的情况下使用 find_elements 获取新元素?
【问题讨论】:
-
您应该能够再次使用元素选择器来获取页面上元素的新副本。
-
@andrewgu 你能解释一下吗?如果我使用
find_elements,我会在StaleError的每2-7 次测试中获得带有旧元素ID 的列表。并非总是如此,但仍然无法使用。 -
您确定您使用的浏览器在您尝试选择它们之前实际创建了新元素吗?尝试在搜索和重新选择元素之间添加更长的延迟以进行测试。
-
有等待页面更新的方法,但这取决于您的具体情况。快速搜索出现this SO question。如果您想继续对话,我建议将其移至聊天(Selenium IRC 或 SE 聊天)。同时,出于测试目的,我建议您延长等待时间,我想看看这是否有帮助。
-
@sortas 我不打算这样做,因为我认为您的问题可能是骗人的,但我希望我的回答能帮助您指导您!我的回答比我们的 cmets 更深入(使用示例代码)。很高兴看到您稍微修改您的问题以提高专业水平,并且您现在对您的问题有了更好的了解。一些sn-ps的代码显示你也不会受到伤害!
标签: python python-3.x selenium selenium-webdriver webdriver