2013-05-18 33 views
0

我使用Selenium來獲取div值,但休閒代碼並未等待頁面,只是爲了URL。我用time.sleep,這是非常原始的,完全不靈活。我想明確地改變它,但是我對Python不太熟悉,並且遇到了問題。在硒中明確

網站名稱已更改,以防萬一:

def repeat(): 
    import wx 
    while True: 
     botloc = driver.find_element_by_id('botloc').text 
     print botloc 
     botX,botY = map(int,botloc.split(',')) 
     print botX 
     print botY 
     wx.Yield() 
def checker(): 
    if driver.current_url == 'logged.example.com': 
     time.sleep(5) 
     repeat() 
    else: 
     checker() 
checker() 

我怎麼能代替time.sleep的東西靈活地等待最短的時間內儘可能的頁面會被加載後?如何正確使用我的代碼?

我知道使用網站中的元素是可行的,但我不能寫任何明智的東西,我只需要一個例子。

是否有可能使用element_by_id('botloc')等待它可見,然後開始repeat()?

回答

0

我該如何取代time.sleep的靈活性等待最短的時間 時間頁面將被加載後?

我想你使用get(url)加載頁面。通常,您無需執行任何操作,WebDriver會自動等待,直到加載頁面。所以你可以刪除time.sleep()。但是,在使用firefox驅動程序使用get加載頁面時會報告一些問題,因爲您將不得不等待某個目標元素,該元素應該位於加載的頁面中,如下所述。

如何正確使用我的代碼?

您是否檢查過Selenium webdriver文檔?你可以明確等待botloc元素如下

//assuming you have a valid webdriver reference 
//Ex: DEFAULT_WAIT = 10 means 
//waits up to 10 seconds before throwing a TimeoutException or if it finds the element will return it in 0 - 10 seconds. 

element = WebDriverWait(webdriver, DEFAULT_WAIT).until(EC.presence_of_element_located((By.ID, "botloc"))) 

請參閱本page瞭解更多信息

+0

**你不必做任何事情,自動的webdriver直到頁面的載入等待。所以你可以刪除time.sleep()**從我的經驗看'driver.current_url'並沒有等待,直到頁面被加載,正在等待單元當前的URL地址將是可見的。 – Mezulith

+0

您正在使用哪個驅動程序?嗯..在Firefox驅動程序中看到一些頁面加載問題。 –