我有一個學校網站 html 頁面,用于發布看起來像這樣的作業:

當您單擊每節課時,會彈出一個 javascript div 元素,您可以在其中寫作業并通過按鈕提交。我想自動填充整個表格。問題是在提交每個作業條目后(通過 http post),DOM 會重繪 。嘗試更新下一個條目顯然會失敗并引發以下例外:
selenium.common.exceptions.StaleElementReferenceException:訊息:(ELEMENT DESCRIBED)的元素參考已過時;要么元素不再附加到 DOM,它不在當前框架背景關系中,要么檔案已被重繪 。
我像這樣回圈所有課程:
monthly_classes = driver.find_elements(By.XPATH, '//div[@]')
count = 0
for item in monthly_classes:
if item.text == "Lesson 1":
item.click()
postHomework()
count = 1
print(item)
else:
print("Pass")
我在提交后嘗試使用以下代碼防止 DOM 重新加載:
driver.execute_script("window.stop();")
和
driver.find_element(By.TAG_NAME, "body").send_keys("Keys.ESCAPE")
有什么方法可以防止 DOM 重新加載?有沒有更好的方法來嘗試完成這項任務?
uj5u.com熱心網友回復:
每次 selenium 找到一個元素時,它都會為它創建一個識別符號。因此,當您在該頁面上提交某些內容時,頁面會重新加載,并且所有元素都會成為 selenium 的新元素(它們現在具有其他識別符號)。
要解決問題,您需要在提交后再次找到所有元素。
所以首先你需要知道元素的數量。然后你可以開始按索引回圈它們。在回圈結束時再次找到元素:
monthly_classes = driver.find_elements(By.XPATH, '//div[@]')
monthly_classes_count = len(monthly_classes)
for i in range(monthly_classes_count):
if monthly_classes[i].text == "Lesson 1":
monthly_classes[i].click()
postHomework()
count = 1
print(item)
else:
print("Pass")
monthly_classes = driver.find_elements(By.XPATH, '//div[@]')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/527442.html
上一篇:如何在KotlinKtor中使用Freemarker為串列中的每個元素執行javascript函式?
下一篇:僅單擊影像時如何觸發事件偵聽器?
