我的工作(使用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重新构建元素列表。 –
我懂了,感谢您的帮助! –