2016-11-28 89 views
0

我正在使用Python的Selenium版本遍歷Select元素選項。它在網站上運行得很好,但在另一個網站上運行得很好,出現錯誤:Message: stale element reference: element is not attached to the page document我當然查了它,但是我發現的答案對我沒有幫助。我使用time.sleep()等待頁面加載,我可以看到它正在瀏覽器中加載。我不知道我該怎麼處理它。Selenium:陳舊元素引用:元素未附加到Python中的頁面文檔中

如何它看起來在代碼:

options = Select(driver.find_element_by_xpath("my_element's_xpath")).options 
for option in options: 
    option.click() 
    sleep(5) 

它工作正常第一次運行,第二輪我得到的錯誤。

這裏是在開發工具中的鉻元素選擇: screenshot 我認爲這可能都與沒有它周圍<option>標籤第一選擇選項的東西,但我不知道如何將它從DOM中刪除。

+0

你確定選擇的項目不會導致重新加載頁面添加sleep(2)(從from time import sleep拍攝)?在這種情況下,存儲在'options'變量中的DOM元素將不再可用。是的,新頁面上可能有相同的元素,但它可能是一個不同的元素。 – J0HN

+0

哦,所以我檢查了網絡,是的,它確實重新加載了頁面。有沒有辦法解決它?編輯:我相信用一種方式存儲選項名稱,然後將這個名稱應用於新的選項集可能? –

+0

是的,你需要做的是在每次迭代時刷新'Select(...)'。比選項列表將有效。 – J0HN

回答

0

我的程序中的代碼比我展示的要大一些,正如J0HN指出的那樣,它會導致瀏覽器刷新。我用一種破解方式解決了它,將每個選項值存儲在引用列表中,然後遍歷它。代碼說話比單詞好,所以請看下面的代碼:

for option in options: 
    options_reference.append(option.text) 

for option in options_reference: 
    option_element = driver.find_element_by_xpath(
      "//*[contains(text(), '" + option + "')]") 
    option_element.click() 

它可以通過將XPath縮小到選項標籤進一步改進。

0

對我來說,這已經足夠了之前options = Select(...)

相關問題