1. 程式人生 > 程式設計 >Python爬蟲之Selenium設定元素等待的方法

Python爬蟲之Selenium設定元素等待的方法

一、顯式等待

WebDriverWait類是由WebDirver 提供的等待方法。在設定時間內,預設每隔一段時間檢測一次當前頁面元素是否存在,如果超過設定時間檢測不到則丟擲異常(TimeoutException)

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

driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

element = WebDriverWait(driver,5,0.5).until(
      EC.presence_of_element_located((By.ID,"kw"))
      )
element.send_keys('selenium')
time.sleep(5)

driver.quit()

語法:

  • WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None).until(method,message=‘')

引數說明如下:

  • driver:瀏覽器驅動
  • timeout:最長超時時間,預設以秒為單位
  • poll_frequency:檢測的間隔時間,預設為0.5s
  • ignored_exceptions:超時後的異常資訊,預設情況下拋NoSuchElementException異常
  • until(method,message=‘'):呼叫該方法提供的驅動程式作為一個引數,直到返回值為True
  • until_not(method,message=‘'):呼叫該方法提供的驅動程式作為一個引數,直到返回值為False
  • presence_of_element_located():判斷元素是否存在。

二、隱式等待

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time

driver = webdriver.Chrome()

# 設定隱式等待為5秒
driver.implicitly_wait(5)
driver.get("http://www.baidu.com")

try:
 print(time.strftime('%Y-%m-%d %H:%M:%S'))
 driver.find_element_by_id("123456").send_keys('selenium') #不存在的id,看輸出報錯和時間
 # driver.find_element_by_id("kw").send_keys('selenium') # 存在的id
except NoSuchElementException as e:
 print(e)
finally:
 print(time.strftime('%Y-%m-%d %H:%M:%S'))
 driver.quit()

implicitly_wait() 預設0,引數的單位為秒,上邊設定的等待時間為5秒,這個時間不像time.sleep(5)那樣直接睡5秒;當執行流程到某個元素定位時,如果元素可以定位,則繼續執行;如果元素定位不到,則它將以迴圈的方式不斷地判斷元素是否被定位到。比如說在1秒的時候定位到了,那麼直接向下執行如果超出設定時長,則丟擲異常。

Selenium文集傳送門:

標題 簡介
Python爬蟲 - Selenium(1)安裝和簡單使用 詳細介紹Selenium的依賴環境在Windows和Centos7上的安裝及簡單使用
Python爬蟲 - Selenium(2)元素定位和WebDriver常用方法 詳細介紹定位元素的8種方式並配合點選和輸入、提交、獲取斷言資訊等方法的使用
Python爬蟲 - Selenium(3)控制瀏覽器的常用方法 詳細介紹自定義瀏覽器視窗大小或全屏、控制瀏覽器後退、前進、重新整理瀏覽器等方法的使用
Python爬蟲 - Selenium(4)配置啟動項引數 詳細介紹Selenium啟動項引數的配置,其中包括無介面模式、瀏覽器視窗大小設定、瀏覽器User-Agent (請求頭)等等
Python爬蟲 - Selenium(5)滑鼠事件 詳細介紹滑鼠右擊、雙擊、拖動、滑鼠懸停等方法的使用
Python爬蟲 - Selenium(6)鍵盤事件 詳細介紹鍵盤的操作,幾乎包含所有常用按鍵以及組合鍵
Python爬蟲 - Selenium(7)多視窗切換 詳細介紹Selenium是如何實現在不同的視窗之間自由切換
Python爬蟲 - Selenium(8)frame/iframe表單巢狀頁面 詳細介紹如何從當前定位的主體切換為frame/iframe表單的內嵌頁面中
Python爬蟲 - Selenium(9)警告框(彈窗)處理 詳細介紹如何定位並處理多類警告彈窗
Python爬蟲 - Selenium(10)下拉框處理 詳細介紹如何靈活的定位並處理下拉框
Python爬蟲 - Selenium(11)檔案上傳 詳細介紹如何優雅的通過send_keys()指定檔案進行上傳
Python爬蟲 - Selenium(12)獲取登入Cookies,並新增Cookies自動登入 詳細介紹如何獲取Cookies和使用Cookies進行自動登入
Python爬蟲 - Selenium(13)設定元素等待 詳細介紹如何優雅的設定元素等待時間,防止程式執行過快而導致元素定位失敗
Python爬蟲 - Selenium(14)視窗截圖 詳細介紹如何使用視窗截圖
Python爬蟲 - Selenium(15)關閉瀏覽器 詳細介紹兩種關閉視窗的區別

到此這篇關於Python爬蟲之Selenium設定元素等待的方法的文章就介紹到這了,更多相關Selenium 元素等待內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!