![](/img/trans.png)
[英]What is the most efficient way to check if a value exists in a NumPy array?
[英]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.