專案實戰 使用顯式等待無法處理的情況

2022-10-09 22:30:23 字數 1408 閱讀 1686

selenium裡有三種等待方式:

隱式等待:載入完瀏覽器開始呼叫,作用域是當前控制代碼的全域性

dr.implicitly_wait(20)

強制等待:建議少用,非必須不用

import time

time.sleep(3) #強制等待3秒

顯式等待:建議使用,但有時候作用並不大

webdriverwait可以結合expected_conditions一起使用

寫法一:

from selenium import webdriver

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 內部...