python selenium 設定等待

2021-10-02 01:54:16 字數 2773 閱讀 5512

在瀏覽器載入頁面是,頁面上的元素可能不會同時載入完成。這時就可能出現元素定位不到的情況,我們可以通過設定元素等待去改善這種情況,等待分為三種:強制等待、隱式等待和顯式等待。

一、強制等待

sleep()方法會讓程式執行到sleep時強制休眠一段時間,該方法有time模組提供,sleep()方法預設引數單位為秒,如果設定時長小於1秒可以用小數表示,如sleep(0.5)。

# -*- coding: utf-8 -*-

from selenium import webdriver

from time import sleep

driver = webdriver.chrome()

driver.get('')

# 強制等待1.5秒

sleep(1.5)

driver.quit()

強制等待不管瀏覽器頁面是否載入完成,程式都固定等待1.5秒後,才會繼續執行下面的**,在執行測試時,使用強制等待嚴重影響**執行速度,一般只有在除錯**時使用。

二、隱式等待

implicitly_wait()隱式等待是在瀏覽器頁面載入時等待一定時長,該方法是由webdriver提供,implicitly_wait()方法預設引數為0,引數單位為秒

# -*- coding: utf-8 -*-

from selenium import webdriver

import time

driver = webdriver.chrome()

driver.get('')

# 設定隱式等待為30秒

driver.implicitly_wait(30)

try:

print(time.ctime())

driver.find_element_by_id('su2').click()

except exception as e:

print(e)

else:

print(time.ctime())

print('操作成功')

finally:

print(time.ctime())

driver.quit()

隱式等待和強制等待不同,30秒是等待的最長時間,而不是固定等待30秒。當程式在第5秒成功定位到元素後程式會繼續往下執行,當程式超過30秒未定位到元素則會丟擲異常。注意這裡有乙個弊端,那就是程式會一直等待整個頁面載入完成,才會執行下一步,但有時候頁面想要的元素早就在載入完成了,但是因為頁面尚未載入完成,仍需要等到頁面全部完成才能執行下一步。

三、顯式等待

webdriverwait()顯式等待是在設定時間內,程式沒間隔一定時間檢查一次當前頁面元素是否存在,一般配合until()和until_not()方法使用。

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.common.by import by

from selenium.webdriver.support import expected_conditions as ec

from selenium.webdriver.support.ui import webdriverwait

from time import sleep

driver = webdriver.chrome()

driver.get('')

locator = (by.id, 'kw')

try:

webdriverwait(driver, 10, 0.5).until(ec.presence_of_all_elements_located(locator))

driver.find_element(by.id, 'kw').send_keys('selenium')

except exception as e:

print(e)

finally:

sleep(5)

driver.quit()

webdriverwait()具體格式為:

webdriverwait(driver=driver, timeout=20, poll_frequency=0.5, ignored_exceptions=none)
driver:瀏覽器驅動

timeout:最長超時時間,預設時間單位為秒

poll_frequency:檢測時間間隔(步長),預設為0.5

ignored_exceptions:檢測超時丟擲的異常資訊,預設為nosuchelementexception異常。

until具體格式為:

until(method,message=」)
method:在等待期間,每隔一段時間(__init__中的poll_frequency)呼叫這個傳入的方法,直到返回值不是false

message:如果超時,丟擲timeoutexception,將message傳入異常

until_not具體格式為:

until_not(method,message=」)
與until相反,until_not是當某元素消失或什麼條件不成立則繼續執行,與until引數相同。

注:顯式等待和隱式等待可以同時使用,同時使用時最長的等待時間取決於兩者之間的大者,如果隱式等待時間 > 顯式等待時間,則最長等待時間為隱式等待時間,反之隱式等待時間 < 顯式等待時間,則最長等待時間為顯式等待時間。

Python Selenium環境搭建

安裝python 設定 python 的環境變數 安裝目錄 安裝目錄 scripts 使用 pip安裝 selenium pip install selenium 安裝完python pip工具,在安裝目錄的 scripts 目錄下。在 dos下直接執行 pip install selenium 即...

Python Selenium 學習筆記

1 判斷元素是否存在 try driver.find element.xx a true except a false if a true print 元素存在 elif a false print 元素不存在 2 判斷元素是否顯示 driver.find element by id outputb...

Python Selenium錯誤小結

因為要使用web應用,所以開始用起了,selenium包,安裝倒是挺容易的,但就是出了很多bug。filenotfounderror winerror 2 系統找不到指定的檔案。通過錯誤反饋發現是要把該軟體加到路徑裡面,但是,設定了系統環境變數後發現還是不行,最後,使用了乙個非常原始的方法 brow...