在python中我寫道:
login_forms = driver.find_elements(by=By.TAG_NAME, value='form')
這非常適合在頁面中獲取所有表單。然后我以這樣的形式遍歷所有輸入:
form_inputs = login_forms[0].find_elements(by=By.TAG_NAME, value='input')
我怎樣才能找到沒有隱藏或禁用的專案(普通用戶可以看到并篡改或在里面修改自己的值)?
建議的代碼(對我不起作用):
login_forms = driver.find_elements(by=By.TAG_NAME, value='form')
for login_form in login_forms:
clean_form_inputs = login_form.find_elements(By.XPATH, "//input[not @disabled and(not(contains(@class,'disabled'))) and(not(contains(.,'display: none')))]")
if len(clean_form_inputs) < 2:
continue
print(str(len(clean_form_inputs)))
我越來越:
selenium.common.exceptions.InvalidSelectorException:訊息:無效選擇器:無法使用 xpath 運算式定位元素 // [not @disabled and(not(contains(@class,'disabled'))) and(not(contains(. ,'display: none')))] 因為以下錯誤:SyntaxError: Failed to execute 'evaluate' on 'Document': The string '// [not @disabled and(not(contains(@class,'disabled' ))) and(not(contains(.,'display: none')))]' 不是有效的 XPath 運算式。(會話資訊:chrome=99.0.4844.83)
uj5u.com熱心網友回復:
鎖了19個小時。對此答案的評論已被禁用,但它仍在接受其他互動。了解更多。去給你一個正確的答案我們需要知道隱藏和禁用的塊和元素是如何定義的。
我可以假設禁用元素將具有disabled屬性或disabled類名,而隱藏塊將具有display: none樣式值或type="hidden".
如果是這樣,我們可以定義定位器來定位所有未禁用且未隱藏的元素,如下所示:
"//*[not(@disabled) and(not(contains(@class,'disabled'))) and(not(contains(.,'display: none'))) and(not(@type='hidden'))]"
使用 Selenium find_elements,它看起來像:
visible_enabled_elements = driver.find_elements(By.XPATH, "//*[not(@disabled) and(not(contains(@class,'disabled'))) and(not(contains(.,'display: none'))) and(not(@type='hidden'))]")
但是這種實作取決于您正在處理的網站上禁用和隱藏元素的準確程度,因為它可能會有所不同。
UPD
不需要合并By.XPATH,By.TAG_NAME因為By.XPATH已經包含元素標簽名稱。
在上面的示例中,我曾經//*定位所有標簽名稱,但如果您只想選擇input元素,例如,它將是:
visible_enabled_elements = driver.find_elements(By.XPATH, "//input[not(@disabled) and(not(contains(@class,'disabled'))) and(not(contains(.,'display: none'))) and(not(@type='hidden'))]")
uj5u.com熱心網友回復:
這取決于表單是如何隱藏或禁用的:
是使用特定類來啟用或禁用的表單
css值是否可以用來決定它是否隱藏
isvisible 和 isEnabled 內置方法是否可以作業等,如果是這樣,找到所有元素然后遍歷每個元素并過濾給出 isvisible 或 isenabled 為 true 的元素
print([driver.find_elements(*locator) if(element.is_displayed())] 中的元素元素)
在以下位置查看所有可用方法:
https://www.selenium.dev/selenium/docs/api/py/webdriver_remote/selenium.webdriver.remote.webelement.html#selenium.webdriver.remote.webelement.WebElement.is_displayed
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447841.html
上一篇:seleniumwebdriver無法使用driver.find_element_by_css_selector點擊按鈕
下一篇:我正在嘗試使用seleniumwebdriverpython選擇隱藏的下拉選單選項,但它拋出“訊息:沒有這樣的元素:無法找到元素”
