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

时间:2013-07-22 09:43:47

标签: python selenium selenium-webdriver

网站有顶级菜单,有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!

2 个答案:

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

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