Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检测页面是否已完全加载Selenium?_Python_Selenium Webdriver - Fatal编程技术网

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

Python 如何检测页面是否已完全加载Selenium?,python,selenium-webdriver,Python,Selenium Webdriver,我要做的是尝试迭代所有select值并获取一些数据。数据是通过AJAX加载的,因此页面不会重新加载-表中的数据只是在更改。如您所见,我尝试使用显式等待,但这不起作用-select值可以是4,但表中的信息仍然可以属于3值。我想知道如何才能确保该页面真正得到更新 有一些类似的问题,但我没有找到合适的解决方案 for i in range(N): try: driver.find_element_by_xpath("//select[@id='search-type']/opt

我要做的是尝试迭代所有select值并获取一些数据。数据是通过AJAX加载的,因此页面不会重新加载-表中的数据只是在更改。如您所见,我尝试使用显式等待,但这不起作用-select值可以是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.sleepN,但我不想这样做。

Selenium使用document.ready状态来确定页面是否已加载。
var javaScriptExecutor = Instance as IJavaScriptExecutor;

bool isPageLoaded = javaScriptExecutor.ExecuteScript("return document.readyState;").Equals("complete");
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实现:

是什么导致页面更新?是点击还是点击?一旦你明白了这一点,想办法检测变化吗?是否在某个地方发布了一条消息,说明更新已经完成,是否有颜色变化等?您能解释一下页面是否真的更新了吗?这对你的应用程序意味着什么?你怎么知道?@SiKing在浏览器点击某个按钮后,表中的页面数据会更新。我可以看到它,因为数据发生了变化。我想有一些方法可以检查是否有网络活动,或者类似的事情。有几种不同的方法可能有效。包含更改数据的元素是否会被删除并读取到DOM中?这是一个简单的例子。如果属性的值是所有更改的值,则需要等待值更改。@JimEvans可能是第一种情况。您不应该这样做,因为这已在webdriver中实现。同样值得一提的是这个答案的原始源代码:很明显,如果它只是一个一半,因为我用我发现的第一个代码来描述它,源代码本身是非常无用的