我正在使用这样的组织解析网页:
<nav class="sidebar-main">
<div class="sidebar">Found 3 targets</div>
<ul><li><a href="#target1" class="current"><span>target1</span></a></li>
<li><a href="#target2" ><span>target2</span></a></li>
<li><a href="#target3"><span>target3</span></a></li></ul>
</nav>
我的目标是遍历每个列表元素,单击流程中的每个元素:
sidebar = browser.find_element_by_class_name('sidebar-main')
elementList = sidebar.find_elements_by_tag_name("li")
for sample in elementList:
browser.implicitly_wait(5)
run_test1 = WebDriverWait(browser, 5).until(
EC.presence_of_element_located((By.CLASS_NAME, 'sidebar-main'))
)
sample.click()
我一直收到错误:
Message: The element reference of <li> stale either the element is no
longer attached to the DOM or the page has been refreshed.
现在只点击一个链接,显然selenium在页面刷新时无法找到后续元素,我该如何解决这个问题呢?
答案 0 :(得分:0)
点击第一个链接后,会导致新页面导航或页面刷新。您需要跟踪元素列表,再次找到列表元素,然后单击所需的元素。如果页面已更改,则您还需要导航回原始页面。
您可以尝试以下内容
sidebar = browser.find_element_by_class_name('sidebar-main')
elementList = sidebar.find_elements_by_tag_name("li")
for i in range(len(elementList)):
element = browser.find_element_by_class_name('sidebar-main').find_elements_by_tag_name("li")[i]
element.click()