2015-09-07 84 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

相關問題