如何检测页面是否已在Selenium中完全加载?

时间:2015-09-07 10:51:33

标签: python selenium-webdriver

我要做的是尝试迭代所有选择值并获取一些数据。数据通过AJAX加载,因此页面不会重新加载 - 表格中的数据只是在变化。正如你所看到的,我试图使用显式等待,但这不起作用 - 选择值可以是" 4"但是表格中的信息仍然属于" 3"值。我想知道如何确定页面真的更新了?

还有一些类似的问题,但我找不到合适的解决方案。

for i in range(N):
    try:
        driver.find_element_by_xpath("//select[@id='search-type']/option[@value='%s']"%i).click()
        driver.find_element_by_name("submit").click()   
    except:
        print i
        continue
    elem = driver.find_element_by_id("my_id")
    wait.until(lambda driver: driver.find_element_by_id('search-type').get_attribute("value")==str(i))
    if no_results(get_bs_source(driver.page_source)):
        print "No results %s"%i
    if is_limited(get_bs_source(driver.page_source)):
        print "LIMITED %s"%i
    data+=get_links_from_current_page(driver)

我确实可以使用time.sleep(N),但这不是我想要的方式。

2 个答案:

答案 0 :(得分:0)

Selenium使用document.ready状态来确定页面是否已加载。 WebDriverWait实现这种逻辑。你不应该直接使用document.readyState! 在大多数功能中,它正在等待,例如:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("http://something.com")
delay = 10 # seconds

WebDriverWait(browser, delay).until(EC.presence_of_element_located(browser.find_element_by_id('IdOfMyElement')))

在这种情况下,它将执行document.ready 2次:第一次browser.get,第二次WebDriverWait

Selenium实施:https://github.com/SeleniumHQ/selenium/blob/01399fffecd5a20af6f31aed6cb0043c9c5cde65/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java#L59-L73

答案 1 :(得分:-1)

public class Test {
    public static void main(String[] args) {
        String y = "ab2";
        if(y.compareTo("ab3") == -1) {
            System.out.println("Test");
        }
    }
}