selenium裡有三種等待方式:
隱式等待:載入完瀏覽器開始呼叫,作用域是當前控制代碼的全域性
dr.implicitly_wait(20)from selenium import webdriver強制等待:建議少用,非必須不用
import time
time.sleep(3) #強制等待3秒
顯式等待:建議使用,但有時候作用並不大
webdriverwait可以結合expected_conditions一起使用
寫法一:
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import webdriverwait
self.driver = webdriver.chrome()
webdriverwait(self.driver).until(ec.presence_of_element_located(loc))
寫法二:
from selenium import webdriver
from selenium.webdriver.support.ui import webdriverwait
self.driver = webdriver.chrome()
webdriverwait(self.driver).until(lambda x:x.find_element(*loc))
無法使用webdriverwait的情況:
勾選商品屬性的時候,選中第乙個屬性,第二個屬性才可點選,但是有延時,所以經常出現未選中的情況,指令碼不穩定。想使用顯式等待處理:webdriverwait(dr, 5, 0.5).until(ec.element_to_be_clickable(el)),但是結果不理想。觀察元素發現
下圖商品屬性通過is_display()方法判斷的結果是可點選的,也正常展示了,所以使用顯式等待無效
for i in range(1,10):
el3 = dr.find_element(by.xpath, '//li[@data-value="128g"]')
r3 = re.search(r'sku-dont-choose', el3.get_attribute("class"))
print('r3第%d次' %(i))
重寫查詢元素的方法加入顯式等待
from selenium.webdriver.support.ui import webdriverwait from selenium.common.exceptions import nosuchelementexception,timeoutexception from selenium i...
專案實戰 分布式事務的應用(一)
處理方式最多的大概就是保證資料的最終一致性吧。在我們的業務系統中,快取 redis或者memcached 通常被用在資料庫之前,作為資料讀取的緩衝,使得i o操作不至於直接落在資料庫上,造成很大的壓力。在我們的系統中相當於做了兩層快取。首先通過建立任務,將服務端提供的一些可靜態化的基礎資料靜態化到m...
在不使用顯式鎖的方式下使用多執行緒
乙個串被定義為序列的呼叫事件控制代碼 非並行呼叫 使用串允許在多執行緒環境中執行 而不使用顯示的互斥鎖。串可以是隱式的或者顯式的,如下方的可替代方法所示 僅在乙個執行緒中呼叫io service run 意味著使用隱式的串執行所有的事件控制代碼,因為io service確保了控制代碼只被run 內部...