解決網頁加載緩慢的幾種方法:
一、顯性等待WebDriverWait,配合該類的until()和until_not()方法,就能夠根據判斷條件而進行靈活地等待

1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 4 driver = webdriver.Firefox() 5 driver.get("https://www.baidu.com/") 6 # 等待時長30秒,默認每0.5秒詢問一次 7 WebDriverWait(driver, 30).until(lambda x: x.find_element_by_id("kw")).send_keys("sky") 8 # sel_count_info = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_id("selCount")).text
WebDriverWait(driver, 超時時長, 調用頻率, 忽略異常).until(可執行方法, 超時時返回的信息)
WebDriverWait(driver, 超時時長, 調用頻率, 忽略異常).until_not(可執行方法, 超時時返回的信息)
可以用selenium提供的 expected_conditions 模塊中的各種條件,也可以用WebElement的 is_displayed() 、is_enabled()、is_selected() 方法,或者用自己封裝的方法都可以
二、強制等待 sleep(xx),不建議總用這種等待方式,太死板,嚴重影響程序執行速度

1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 4 driver = webdriver.Firefox() 5 driver.get("https://www.baidu.com/") 6 # 強制等待時長5秒 7 driver.find_element_by_id("kw").send_keys("sky")
三、隱性等待implicitly_wait(xx),隱性等待對整個driver的周期都起作用,所以只要設置一次即可

1 from selenium import webdriver 2 3 driver = webdriver.Firefox() 4 # 隱性等待,最長等30秒 5 driver.implicitly_wait(30) 6 driver.get('https://huilansame.github.io')
四、隱性顯性並用

1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 from selenium.webdriver.support import expected_conditions as EC 4 from selenium.webdriver.common.by import By 5 driver = webdriver.Firefox() 6 driver.implicitly_wait(10) # 隱性等待和顯性等待可以同時用,但要注意:等待的最長時間取兩者之中的大者 7 driver.get('https://huilansame.github.io') 8 locator = (By.LINK_TEXT, 'CSDN') 9 try: 10 WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator)) 11 print(driver.find_element_by_link_text('CSDN').get_attribute('href')) 12 finally: 13 driver.close()