使用Selenium webdriver Python逐个单击链接
我制作的脚本搜索我感兴趣的字符串集,但我有错误。 如何解决以下问题:使用Selenium webdriver Python逐个单击链接,python,python-2.7,selenium,selenium-webdriver,Python,Python 2.7,Selenium,Selenium Webdriver,我制作的脚本搜索我感兴趣的字符串集,但我有错误。 如何解决以下问题: links = driver.find_elements_by_xpath("xpath") for x in range(0, len(links)): driver.implicitly_wait(2) links[x].click() try: driver.implicitly_wait(3) DO something driver.back()
links = driver.find_elements_by_xpath("xpath")
for x in range(0, len(links)):
driver.implicitly_wait(2)
links[x].click()
try:
driver.implicitly_wait(3)
DO something
driver.back()
print("Mission completed!!")
except (ElementNotVisibleException, NoSuchElementException):
driver.back()
print("No action")
Error:
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference is stale. Either the element is no longer attached to the DOM or the page has been refreshed.
in line: links[x].click()
点击链接做什么?如果单击后导航到另一个页面,那么迭代中的下一个页面将不再位于DOM中,实际上会变得过时 点击链接做什么?如果单击后导航到另一个页面,那么迭代中的下一个页面将不再位于DOM中,实际上会变得过时 一旦从列表
链接中指向新页面元素,这些元素就会过时-您无法再使用它们
您可以改为使用以下代码:
links = [link.get_attribute('href') for link in driver.find_elements_by_xpath("xpath")]
for link in links:
driver.get(link)
# DO something
这将允许您获取引用列表,并在列表链接中重新定向到新页面元素后,使每个页面处于循环中变旧-您无法再使用它们
您可以改为使用以下代码:
links = [link.get_attribute('href') for link in driver.find_elements_by_xpath("xpath")]
for link in links:
driver.get(link)
# DO something
这将允许您获取参考列表,并在循环中获取每页thx man!你教了我很多好代码:)这是最好的方法吗?我的网站在搜索20个链接后看起来和谷歌一样。如果只有一个页面有20个链接,你可以按原样使用它,但是如果你有分页(多个页面,每个页面上有20个链接),那么你可以做另一个循环,点击Next
按钮附加每个页面的链接,然后通过提供的循环。一个循环-收集链接,一个-跟踪引用列表中的链接thx man!你教了我很多好代码:)这是最好的方法吗?我的网站在搜索20个链接后看起来和谷歌一样。如果只有一个页面有20个链接,你可以按原样使用它,但是如果你有分页(多个页面,每个页面上有20个链接),那么你可以做另一个循环,点击Next
按钮附加每个页面的链接,然后通过提供的循环。一个循环-收集链接,一个循环-跟踪引用列表中的链接