2017-06-12 129 views
1

當頁面使用AJAX時,可以使用隱式和顯式等待,但是當加載足夠的元素時,我想停止由driver.get()引起的加載。是否有可能這樣做,因爲driver.get()調用僅在頁面加載完成時才返回。Selenium python:如何在某些元素加載時停止頁面加載?

+0

現在你爲什麼會做這樣的事情,讓我們說你等待一個按鈕來顯示。一旦按鈕顯示你做任何你想做的事情,它不會等待頁面在它執行你的命令之前完全加載,除非你有這樣的一個替代原因,這是沒用的。 –

+0

@ElvirMuslic但是,只有當頁面完成加載後,纔會調用driver.get()。這就像我想以編程方式點擊該按鈕,一旦按鈕可見不等待整個頁面加載。 – RamKumar

+0

並非如此,driver.get()只是使請求不會等待元素加載。如果你說driver.something.click(),它會在它獲得關於該頁面的任何響應後立即執行它,如果該元素不存在,則會引發錯誤。 含義,1.driver.get()等待來自頁面的任何響應(不是全部)。 2.您可以執行任何您想要的內容,並且該頁面不必完全加載,但會在執行這些操作時加載。 3.這可以用來節省時間和使用我想以某種方式(對於大型項目) –

回答

5

是的,可以將pageLoadStrategy的能力設置爲none。然後等待一個元素存在,並呼籲​​停止加載:

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 

capa = DesiredCapabilities.CHROME 
capa["pageLoadStrategy"] = "none" 

driver = webdriver.Chrome(desired_capabilities=capa) 
wait = WebDriverWait(driver, 20) 

driver.get('http://stackoverflow.com/') 

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#h-top-questions'))) 

driver.execute_script("window.stop();") 
+0

如果我想在本地執行此代碼,我需要在本地執行什麼操作?我理解依賴關係的要求,但是我需要在上述測試中指向一個chromedriver嗎?你如何在沒有語言綁定的情況下執行上述操作? – Wunderbread

+0

@Wunderbread,我不確定「沒有語言綁定」是什麼意思,但是要在本地執行代碼,可以將chromedriver放在'PATH'環境變量中,或者將路徑提供給構造函數('webdriver.Chrome ')。 –

+0

明白了,謝謝。我的意思是在沒有框架的情況下執行上述測試。命令「pytest test_foo.py」 – Wunderbread

相關問題