我正在与一个数据库进行交互,该数据库使用selenium返回有关事件的报纸报道。每次实现搜索查询时,数据库都会打开一个新页面并开始加载有关该事件的所有报纸报告。该网页有一个元素,用于报告找到的相关报告的总数。在页面完全加载之前,数字会更改。
我的问题是有一种方法可以确定页面是否已加载。我目前的策略是检查循环中的总报告数,并在两个循环报告相同数量的总报告时确定页面已完成。我不确定这是不是一个好策略。
答案 0 :(得分:0)
我目前的策略是检查循环中的总报告数,并在两个循环报告相同数量的总报告时确定页面已完成。我不确定这是不是一个好策略。
是。
当"页面加载时没有通用规则"从某种意义上说,您可以以预期的方式与其进行交互,并能够控制所需的元素。检查计数器 - 加载了多少结果是用于等待"等等的常见条件。 - 通常是Explicit Wait。
结果计数器尤其常用于有无限的"在页面上滚动分页 - 每次我们滚动时,我们检查当前结果计数是否大于滚动前的结果 - 这表示结果的新部分到达并且我们可以再次滚动。
答案 1 :(得分:0)
当您与数据库(可能是Button
或Link
)进行交互时,数据库会打开一个新页面并开始加载有关该事件的所有报纸报告,因此评估 {{ 1}} 在这里不会帮助我们。
根据你的问题陈述:
("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
子句设置为以下任意一种:
text_to_be_present_in_element(locator, text_)
:
expected_conditions
text_to_be_present_in_element_value(locator, text_)
:
WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "css_selector"), "2"))
此策略可让您花费最短的时间等待WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, "css_selector"), "2"))
text