通过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)
。这与等待时间无关,但无法找到可单击的项目,因为“元素未附加到页面文档”