网站有顶级菜单,有6个链接。我可以得到这样的链接列表:
links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR)
在此之后,我需要逐个点击此链接。如果我这样做:
for link in links:
link.click()
我收到以下错误:selenium.common.exceptions.StaleElementReferenceException: Message: u'Element not found in the cache - perhaps the page has changed since it was looked up'
。据我了解,这个错误引发了因为WebElement
个实例之间的连接,并且在重新加载页面后点击了网页的DOM(点击链接)。
在这里,我应该注意到所有页面上的顶层菜单都是相同的。
那么,我做错了什么?如何解决这个问题? TIA!
答案 0 :(得分:5)
我不太了解Selenium,但你应该再次选择链接 -
for i in range(0,6):
links = browser.find_elements_by_css_selector(MENU_LINKS_CSS_SELECTOR)
links[i].click()
答案 1 :(得分:0)
另一种方法是做同样的事情,但使用稍微不同的方法......
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()
这种方式稍微优化了一些,因为它不会在每次页面重新加载时获得完整的元素数组