2015-09-07 85 views
0

我要做的是试图迭代所有选择值并获取一些数据。数据通过AJAX加载,因此页面不会重新加载 - 表格中的数据正在改变。正如你可以看到我试图使用明确的等待,但这不起作用 - 选择值可以是“4”,但表中的信息仍然可以属于“3”值。我想知道如何确保页面真的更新?如何检测页面是否完全加载到Selenium中?

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

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),但这不是我想要这样做的方式。

+0

什么是导致页面更新?这是一个点击或?一旦你弄清楚了,找出一种方法来检测变化?是否有消息发布在哪里,指出更新完成,是否有颜色变化等? – JeffC

+0

你能解释“该页面是否真正更新”?这是什么意思**为您的应用程序**?你怎么知道? – SiKing

+0

@浏览器点击某个按钮后 - 表中的页面数据被更新。我可以看到它,因为数据发生变化。我认为有办法检查是否有一些网络活动,或类似的东西。 –

回答

-1
var javaScriptExecutor = Instance as IJavaScriptExecutor; 

bool isPageLoaded = javaScriptExecutor.ExecuteScript("return document.readyState;").Equals("complete"); 
+0

你不应该这样做,因为这已经在webdriver中实现。 https://github.com/SeleniumHQ/selenium/blob/01399fffecd5a20af6f31aed6cb0043c9c5cde65/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java#L59-L73 – stanjer

0

硒使用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秒时间。

硒执行:https://github.com/SeleniumHQ/selenium/blob/01399fffecd5a20af6f31aed6cb0043c9c5cde65/java/client/src/com/thoughtworks/selenium/webdriven/commands/WaitForPageToLoad.java#L59-L73

+0

也值得一提这个答案的原始来源: http://stackoverflow.com/questions/26566799/selenium-python-how-to-wait-until-the-page-is-loaded –

+0

很明显,只是一半,因为我拿了第一个代码,我发现描述它(源代码本身是相当无用的) – stanjer

相关问题