Python Selenium:通过嵌入在<li>元素中的href进行循环

时间:2017-05-23 21:03:37

标签: python html selenium web-scraping

我正在使用这样的组织解析网页:

<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在页面刷新时无法找到后续元素,我该如何解决这个问题呢?

1 个答案:

答案 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()