簡體   English   中英

檢查 selenium 中是否存在元素的最有效方法

[英]Most efficient way to check if element exists in selenium

(對不起,我對這一切都很陌生)

上下文:我的意思是多線程幾個瀏覽器實例並在其中執行進程。

提問的原因:我想知道在 python selenium 中檢查元素的最有效/最省錢的方法是什么。 我已經嘗試了兩種方法,我將在下面展示,並且對我的每一種方法都有一些了解。

首先,這是我的 function 返回驅動程序實例

def open_driver():
    chrome_options = webdriver.ChromeOptions()
    prefs = {"profile.default_conte nt_setting_values.notifications" : 2}
    chrome_options.add_experimental_option("prefs", prefs)
    chrome_options.add_argument("start-maximized")
    chrome_options.add_argument('ignore-certificate-errors')
    chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])

    capa = DesiredCapabilities.CHROME
    capa["pageLoadStrategy"] = "none"

    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome, desired_capabilities=capa)

    return driver

請注意這一特定行:

capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"

據我了解,這將告訴 selenium 不要等待 dom 完全加載。 這是我必須選擇的性能權衡,因為這個特定頁面有時會無休止地卡在document.readyState == interactive

因此,在檢查元素是否存在時,我基本上有兩個選項(我也很欣賞建議),它們是:

1 - 返回 WebElement 的WebDriverWait(self.driver,self.timeout).until(EC.presence_of_element_located((By.XPATH, element)))

關於這條線的兩件事:

a) 我認為它不尊重self.timeout時間,因為capa["pageLoadStrategy"] = "none"但我不確定

b)它非常不穩定,有時它運行得很快,有時很慢

2 - driver.execute_script("document.getElementsByClassName('alert alert-danger ng-binding ng-scope')[0].innerText")

this inside a try: except:與上面的方法相比,方法的執行速度似乎要快得多,但它似乎使瀏覽器過載,然后執行更頻繁地顯示錯誤(從服務器獲取數據時出錯)

話雖如此,並重申我對此並不陌生,我感謝您花時間閱讀我的問題。

ps:我全力以赴尋求建議、改進和特別修正

底線

特定頁面有時會無休止地卡住會相對更容易解決。 然而,繞過

document.readyState == interactive

並贊成:

capa["pageLoadStrategy"] = "none"

並配置Selenium不等待 dom 完全加載不僅是在性能上的權衡,而且也是一個障礙,你被迫使用 present_of_element_located( )而不是visibility_of_element_located()並導致不穩定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM