我正在尝试使用Selenium Python以Chrome浏览器作为浏览器在网页上下载所有pdf,但每次会话都以此消息结束:
StaleElementReferenceException: stale element reference: element is not attached to the page document
(Session info: chrome=52.0.2743.116)
(Driver info: chromedriver=2.22.397933
这是代码:
def download_pdf(self):
current = self.driver.current_url
lista_link_temp = self.driver.find_elements_by_xpath("//*[@href]")
for link in lista_link_temp:
if "pdf+html" in str(link.get_attribute("href")):
tutor = link.get_attribute("href")
self.driver.get(str(tutor))
self.driver.get(current)
请帮帮我..我刚试过lambda,隐式和显式等待
由于
答案 0 :(得分:0)
当您搜索元素时,在对其执行任何操作之前,页面已更改/重新加载,您将获得陈旧元素。
在页面中执行任何操作之前,请确保页面已完全加载。
所以你需要先添加一个条件来等待加载页面,或者检查所有请求是否完成。
答案 1 :(得分:0)
只要在循环中调用self.driver.get()
,元素列表中的所有其他元素都将变为陈旧。首先尝试从元素中收集href
属性,然后访问它们:
def download_pdf(self):
current = self.driver.current_url
lista_link_temp = self.driver.find_elements_by_xpath("//*[@href]")
pdf_hrefs = []
# You could do this part with a single line list comprehension too, but would be really long...
for link in lista_link_temp:
href = str(link.get_attribute("href"))
if "pdf+html" in href:
pdf_hrefs.append(href)
for h in pdf_hrefs:
self.driver.get(h)
self.driver.get(current)