通过xpath查找元素的第二次迭代在selenium python中出现了错误

通过xpath查找元素的第二次迭代在selenium python中出现了错误,python,html,selenium,Python,Html,Selenium,我正试图在我大学网站的仪表板上找到我所有的主题。 我用硒来做。 网站有点慢,所以我先等一下 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='multiline']"))) 然后我找到了所有的元素 course = driver.find_elements_by_xpath("//span[@class='multiline']")

我正试图在我大学网站的仪表板上找到我所有的主题。 我用硒来做。 网站有点慢,所以我先等一下

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='multiline']")))
然后我找到了所有的元素

course = driver.find_elements_by_xpath("//span[@class='multiline']")
之后,在for循环中,我尝试遍历它,“课程”的第0位运行良好,我可以单击它并转到网页,但当循环运行第二次时,即“课程”的第1位它给我错误selenium.common.exceptions.StaleElementReferenceException:消息:stale元素引用:元素未附加到页面文档

所以我试着用2方法增加一点等待时间,但它仍然会给我错误

driver.implicitly_wait(20)


WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='multiline']")))
环路

for i in course[1::]:

#driver.implicitly_wait(20)

#WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='multiline']")))

print(i)
i.click()

driver.implicitly_wait(2)

driver.back()
网站的一个片段


提前感谢您在广泛研究后回答我自己的问题

在web应用程序中,用于模拟选项卡式UI的常用技术是为每个选项卡准备div,但仅附加 一次一个,将其余的存储在变量中。在这种情况下,我的代码有一个引用 添加到不再附加到DOM的元素(即具有“document.documentElement”祖先的元素)

如果WebDriver在这种情况下抛出一个过时的元素异常,即使该元素仍然存在,引用 他迷路了。您应该放弃当前持有的引用并替换它,可能需要重新定位该元素 一旦它连接到DOM

for i in range(len(course)):

    # here you need to find all the elements again because once we
     leave the page the reference will be lost and we need to find it again
    course = driver.find_elements_by_xpath("//span[@class='multiline']")

    print(course[i].text)
    course[i].click()

    driver.implicitly_wait(2)

    driver.back()

implicity\u wait()
设置默认终止时间。它不像停顿那样使用。如果希望代码停止2秒,则需要使用导入
time
模块的
time.sleep(2)
。这与等待时间无关,但无法找到可单击的项目,因为“元素未附加到页面文档”