您好,我正在嘗試訪問彈出式用戶界面 (Aantal KvK uittreksels) 中的輸入欄位。現在我正在嘗試這段代碼:
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[contains(.,'custom_field_387439')]")))
element.send_keys("testing")
導致此錯誤:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
這是 webview Google Elements:

請告訴我。
uj5u.com熱心網友回復:
StaleElementReferenceException應用后出現WebDriverWait element_to_be_clickable expected_conditions意味著您正在處理的頁面是使用對 Selenium 不友好的動態 DOM 技術構建的。執行頁面渲染,以便在某些步驟中所需的物理元素已經存在,甚至看起來可點擊,即定義為完全渲染,但之后頁面渲染仍在繼續,因此先前由 Selenium 收集的 web 元素(實際上是指向DOM 上的物理元素)參考不再指向該物理元素,因為先前創建的物理元素不再存在,現在創建了新的物理元素。
為了克服這個問題,我們可以創建一種特殊的方法來嘗試在回圈中單擊元素。是這樣的:
def click_element(locator):
for i in range(5):
try:
wait.until(EC.element_to_be_clickable(locator)).click()
break
except:
pass
可以用完全相同的方式發送密鑰:
def send_keys_in_loop(locator, value):
for i in range(5):
try:
wait.until(EC.element_to_be_clickable(locator)).send_keys(value)
break
except:
pass
您可以按以下方式使用這些方法:
click_element((By.XPATH, "//input[contains(.,'custom_field_387439')]"))
send_keys_in_loop((By.XPATH, "//input[contains(.,'custom_field_387439')]"),"testing")
請注意locator這里的引數是一個元組,所以我在呼叫click_element和click_element方法時使用雙括號,而在這些方法實作中你只能看到element_to_be_clickable(locator)運算式中的單括號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535812.html
標籤:Python硒selenium-webdriver陈旧元素引用异常
上一篇:如何在SwiftPackageManager專案xcode中列印出控制臺
下一篇:即使設定了[FromBody]和Content-Type,ControllerAction也不會使用JSFetchAPI接受JSONpost
