如何使用SeleniumWebDriver和Python逐个单击链接

如何使用SeleniumWebDriver和Python逐个单击链接,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,网站有6个链接的顶部菜单。我可以得到如下链接列表: links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR) for link in links: link.click() 在此之后,我需要点击这个链接一个接一个。如果我这样做: links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR) for link in lin

网站有6个链接的顶部菜单。我可以得到如下链接列表:

links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR)
for link in links:
    link.click()
在此之后,我需要点击这个链接一个接一个。如果我这样做:

links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR)
for link in links:
    link.click()
我收到以下错误:
selenium.common.exceptions.StaleElementReferenceException:Message:u'Element未在缓存中找到-可能页面在查找后已更改“
。据我所知,此错误是由于b
WebElement
实例之间的连接以及重新加载页面(单击链接)后网页的DOM被破坏而引起的

这里我应该注意到,所有页面的顶部菜单都是相同的


那么,我做错了什么?如何解决这个问题?蒂亚

我知道的不多,但你应该再次选择链接-

for i in range(0,6):
    links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR)
    links[i].click()

我知道的不多,但你应该再次选择链接-

for i in range(0,6):
    links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR)
    links[i].click()

另一种方法是做同样的事情,但使用稍微不同的方法

for i in range(len(browser.find_elements_by_css_selector)):
    link = browser.find_element_by_css_selector('ul > li:nth-child({})'.format(i + 1))
    link.click()

这种方法稍微优化了一点,因为它不会在每次重新加载页面时获得完整的元素数组

另一种方法是做同样的事情,但使用稍微不同的方法

for i in range(len(browser.find_elements_by_css_selector)):
    link = browser.find_element_by_css_selector('ul > li:nth-child({})'.format(i + 1))
    link.click()

这种方法稍微优化了一些,因为它不会在每次重新加载页面时获得完整的元素数组

,因此您知道收到的异常可能是由于在单击链接时重新加载页面造成的。因此,保存的对列表中下一个链接的“selenium”引用将不再存在。根据Svinet的回答,每次单击下一个链接时,您都需要收集链接列表-“刷新”每个链接的selenium引用。因此,您知道,您收到的异常可能是由于在单击链接时重新加载页面造成的。因此,保存的对列表中下一个链接的“selenium”引用将不再存在。根据Svinet的回答,每次单击下一个链接时,您都需要收集链接列表-“刷新”每个链接的selenium引用。