selenium基礎(五):目標驗證&元素等待
阿新 • • 發佈:2022-05-24
目標驗證
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提供了兩種型別的元素等待:顯示等待、隱式等待
- 顯示等待(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秒尚未出現則拋異常
- 隱式等待(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秒