這個假期有些長,長到忘記了要學習,要找工作,好吧,在我每天無休止的追著偶像劇時,我確實沒有負罪感,在聽了小祥大佬的分享後,我連睡午覺都被嚇醒。大佬跟我同一個班,在大廠工作,每天還抽時間學習,作業也沒落下,看看自己,再對比下別人,終於明白,我拿不到高薪原來是有原因的,話不多說,從昨天開始我進入了web ...
這個假期有些長,長到忘記了要學習,要找工作,好吧,在我每天無休止的追著偶像劇時,我確實沒有負罪感,在聽了小祥大佬的分享後,我連睡午覺都被嚇醒。大佬跟我同一個班,在大廠工作,每天還抽時間學習,作業也沒落下,看看自己,再對比下別人,終於明白,我拿不到高薪原來是有原因的,話不多說,從昨天開始我進入了web自動化的學習,今天整理了下三大等待方式,特此做個筆記吧,後續忘記了可以再review。
等待分為三種:
1.等待(俗稱傻等) time.sleep(2)
這種等待就按照設定的時間,傻傻的等待,配合著第三種等待來使用
2.隱性等待 implicitly_wait(30)
放在開始與瀏覽器對話開始,對於當前頁面來說,隱性的等待,超過了等待時間才會拋出異常
作用:1.等待元素被找到,2.等待命令執行完成
3.顯式等待
所有條件都是明確指出來,等待條件存在之後,再進行後續的代碼執行
等待:webdriverwait 條件:expected_condition
等待20秒 檢測條件成立的間隔:預設是0.5秒
上段代碼,就好理解了
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#開始與瀏覽器的會話
dr = webdriver.Chrome()
#當前頁面,隱性等待30秒
dr.implicitly_wait(30)
dr.get('http://www.baidu.com')
#動作,點擊登錄鏈接
dr.maximize_window() #視窗最大化
time.sleep(2)
#查找元素,點擊登錄鏈接動作
loc = (By.XPATH,'//*[@id="u1"]//a[@name="tj_login"]')
dr.find_element(*loc).click()
time.sleep(3)
#等待xxx元素可見
#1.元素定位表達式
loc = (By.ID,'TANGRAM__PSP_10__footerULoginBtn')
#1.WebDriverWait(dr,20,1),第一個參數把當前的會話傳給它,第二個參數是等待的最長時間,第三個參數是輪詢時間為1s,預設是0.5秒。可以不用填寫
#2.until(EC.visibility_of_element_located(loc))直到元素可見時就執行,參數為:loc元組,一般用元組不可變來表達
WebDriverWait(dr,20,1).until(EC.visibility_of_element_located(loc))
#查找登錄賬號的元素,做點擊操作
dr.find_element(*loc).click()
time.sleep(2)
#結束會話
dr.quit()
那麼什麼時候需要等待?
元素操作之前,穩妥起見,都需要等一等