2016-09-16 59 views
1

我想下載所有關於使用Selenium用Python將Chrome作爲瀏覽器,但每次會話與此消息結束時間網頁上的PDF格式:硒的Python StaleElementReferenceException

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) 

請幫助我..我只是試着拉姆達,顯性和隱性等待

感謝

回答

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) 
+0

太棒了!有用!謝謝..我失去了希望.. – LBdoc

+0

@Lddoc很高興聽到它! – elethan

0

當您搜索元素時,在對頁面進行任何操作之前頁面已更改/重新加載之前,您會收到陳舊元素。

確保頁面在頁面中執行任何操作之前已完全加載。

所以你需要先添加一個條件來等待頁面加載,也許檢查所有的請求完成。

+0

Thanks..I試圖用隱性和顯性等待而不success..I爲了即使time.sleep試圖等待頁面加載.. – LBdoc

+0

你是對的,元素陳舊,因爲他們已被重新加載,但據我所知,這不是一個等待項目加載的問題;一旦出現問題,你必須再次找到他們。 – elethan