webdriver 中的三种等待方式

一、强制等待

  from selenium import webdriver
  from time import sleep

   driver = webdriver.Chrome()
   driver.get('https://www.baidu.com/')
   sleep(3)#强制等待3s之后再执行下一步
   print driver.current_url
   driver.quit()

强制等待,无论浏览器是否加载完成都要等待3s,3s之后再执行下一步。
不过不建议使用此等待方式,太死板,严重影响程序执行效率

二、隐式等待

    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com/')
    driver.implicitly_wait(30)  # 隐性等待,最长等30秒
    print driver.current_url
    driver.quit()

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步;
否则一直等到时间截止,然后执行下一步。

不过有个弊端那就是程序会一直等待整个页面加载完成,才会执行下一步。

注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

三、显式等待

程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By

    driver = webdriver.Chrome()
    
    driver.implicitly_wait(10)  # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
    driver.get('https://www.baidu.com/')
    locator = (By.LINK_TEXT, 'hao123')
      try:
          WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
          print driver.find_element_by_link_text('hao123').get_attribute('href')
      finally:
          driver.close()

参考博客

你可能感兴趣的:(webdriver 中的三种等待方式)