1. 程式人生 > 其它 >selenium基礎(五):目標驗證&元素等待

selenium基礎(五):目標驗證&元素等待

目標驗證

selenimun中幾種常用的驗證資訊方法:title、current_url、text。

  • title:獲取當前頁面的標題
  • current_url:獲取當前頁面的url
  • text:獲取當前頁面的文字資訊

以百度為例,驗證點選【hao123】後是否跳轉到正確的hao123頁面

#-*-encoding:utf-8-*-
from selenium impor twebdriver

driver=webdriver.Firefox()
driver.get("https://www.baidu.com")
first_title=driver.title
print("The first page is:%s"%first_title)

driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[3]/a[2]").click()
second_title=driver.title
print("The second page is:%s"%second_title)

expect_tltle="hao123_上網從這裡開始"
if second_title == expect_tltle:
    print(True)

元素等待

WebDriver提供了兩種型別的元素等待:顯示等待、隱式等待

  1. 顯示等待(WebDriverWait類),使WebDriver等待某個條件成立時繼續執行,否則在達到最大時間長時丟擲超出時間異常
#*********
# 顯示等待,WebDriverWait
#*********

from selenium import webdriver
from selenium.webdriver.common.byimportBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Firefox()
driver.get("https://www.baidu.com")

elelement=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
elelement.send_keys('Bela')

driver.find_element_by_xpath("//*[@id='su']").click()
driver.quit()

說明:顯示等待是單獨針對某個元素,設定一個等待時間如5秒,每隔0.5秒檢查一次是否出現,如果在5秒之前任何時候出現,則繼續向下,超過5秒尚未出現則拋異常

  1. 隱式等待(implicitly_wait),通過一定時長的等待頁面上元素載入完成。如果超出了設定的時長,元素還未被載入,則丟擲異常NoSuchElementException
#*********
#隱式等待
#*********

from selenium import webdriver
from elenium.common.exceptions import NoSuchElementException
from time import sleep,ctime

driver=webdriver.Firefox()
#implicitly_wait是隱式等待
#判斷某元素,如果超過10秒未發現,則丟擲異常
#如果在10秒內發現,則對該元素進行操作
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")

try:
    print(ctime())
    driver.find_element_by_xpath("//*[@id='kww']").send_keys('Bela')
    driver.find_element_by_xpath("//*[@id='su']").click()
except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())

說明:隱式等待是全域性的是針對所有元素,設定等待時間如10秒,如果10秒內出現,則繼續向下,否則拋異常。可以理解為在10秒以內,不停重新整理看元素是否加載出來。

顯示等待和隱式等待的區別:

  • 顯示等待針對某個元素,需要在每個等待的元素面前進行宣告
  • 隱式等待針對所有元素,一般在開啟瀏覽器後進行宣告。對整個driver的宣告週期都有效,後面不用重複宣告
  • 隱式等待缺點:指令碼會一直等待整個頁面的載入完成,但是有時候 頁面的元素早載入完成,而瀏覽器比如JS內容載入較慢,而此時也需要等待

3.強制等待:
time.sleep(3)
用以設定固定的執行緒休眠時間(s),使得整個指令碼暫停。但是這種方式會導致這個指令碼執行時間過長,不到萬不得已儘可能少用,特殊情況下,時間設定最好不超過1秒,一般0.5秒