我正在与一个数据库交互,该数据库使用selenium返回有关事件的报纸报道。每次实现搜索查询时,数据库都会打开一个新页面并开始加载有关该事件的所有报纸报告。该网页有一个元素,用于报告找到的相关报告的总数。在页面完全加载之前,数字会更改。
我的问题是有一种方法来确定页面是否已加载。我目前的策略是检查循环中的总报告数,并在两个循环报告相同数量的总报告时确定页面已完成。我不确定这是不是一个好策略。
我目前的策略是检查循环中的总报告数,并在两个循环报告相同数量的总报告时确定页面已完成。我不确定这是不是一个好策略。
它是。
在“加载页面”时,没有通用规则,您可以以预期的方式与其进行交互,并能够控制所需的元素。检查计数器 - 加载了多少结果是用于“等待”的常见条件 - 通常是Explicit Wait。
当页面上存在“无限”滚动分页时,结果计数器尤其常用 - 每次滚动时我们检查当前结果计数是否大于滚动前的结果 - 这表示结果的新部分到了,我们可以再次滚动。
当您与数据库(可能是Button
或Link
)进行交互时,数据库将打开一个新页面并开始加载有关该事件的所有报纸报告,因此重新评估("return document.readyState").equals("complete")
将无法帮助我们。
根据你的问题陈述:
My current strategy is to check the number of total reports in a loop and decides the page is complete when two loops report the same number of total reports.
是的,这是确切的方式,但您没有对如何实施解决方案有所了解。
最有效的解决方案是使用WebDriverWait
子句将expected_conditions
设置为以下任一项:
text_to_be_present_in_element(locator, text_)
:
WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "css_selector"), "2"))
text_to_be_present_in_element_value(locator, text_)
:
WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, "css_selector"), "2"))
这个策略将使您能够花费最短的时间等待text
在HTML DOM
中呈现