Python 如何检测页面是否已完全加载Selenium?
我要做的是尝试迭代所有select值并获取一些数据。数据是通过AJAX加载的,因此页面不会重新加载-表中的数据只是在更改。如您所见,我尝试使用显式等待,但这不起作用-select值可以是4,但表中的信息仍然可以属于3值。我想知道如何才能确保该页面真正得到更新 有一些类似的问题,但我没有找到合适的解决方案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
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中实现。同样值得一提的是这个答案的原始源代码:很明显,如果它只是一个一半,因为我用我发现的第一个代码来描述它,源代码本身是非常无用的