我的工作(使用anytree),爲了做到這一點使網站地圖/有些樹的點擊,我需要硒找到一個特定元素頁面(代表類別),然後系統地點擊這些元素,在每個新頁面上尋找新的類別,直到我們沒有再打入類別,即。所有的樹葉和樹木都被填滿。如何使用Selenium通過多個元素,同時避免陳舊的元素錯誤
我有很多的這個已經寫入。嘗試遍歷我的元素列表時出現了我的問題。我目前嘗試填充樹深度優先,下到樹葉,然後彈出回到原來的頁面,繼續與列表中的下一個元素相同的東西。但是,這會導致Stale element reference
錯誤,因爲我的頁面會重新加載。什麼是解決這個問題的方法?我可以以某種方式在新窗口中打開新鏈接,以便保留舊頁面?我發現這個異常的唯一修復是整齊地捕捉它,但是這對我沒有幫助。
這裏是我到目前爲止的代碼(問題在於for循環):
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from anytree import Node, RenderTree
def findnodes(driver) :
driver.implicitly_wait(5)
try:
nodes = driver.find_elements_by_css_selector('h3.ng-binding')
except:
nodes = []
return nodes
def populateTree(driver, par) :
url = driver.current_url
pages = findnodes(driver)
if len(pages)>0 :
for page in pages:
print(page.text)
Node(page.text, parent=par)
page.click()
populateTree(driver, page.text)
driver.get(url)
driver = webdriver.Chrome()
#Get starting page
main ='http://www.example.com'
root = Node(main)
driver.get(main)
populateTree(driver, root)
for pre, fill, node in RenderTree(root):
print("%s%s" % (pre, node.name))
感謝您的幫助,即使它不是你的語言!我很感激。我明白爲什麼我會得到陳舊的錯誤,但是我找到了一個元素列表並試圖遍歷它們,因爲您的示例只是重新提煉特定元素(如果我正在閱讀它的話)。如果你有一份要經歷的內容清單,那麼你怎麼能夠避免這種情況發生呢? –
再次使用xpath重新構建元素列表。 –
我懂了,感謝您的幫助! –