2016-09-16 21 views
1

私はブラウザとしてChromeでセレンのPythonを使ってWebページ上のすべての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

@LBdocそれを聞いてうれしい! – elethan

0

要素を検索してその上で何らかのアクションを実行する前に、ページが変更/再ロードされたときに古い要素が得られます。

ページ内の操作を行う前に、ページが完全に読み込まれていることを確認してください。

最初にページをロードするのを待つ条件を追加する必要があります。多分、すべてのリクエストが完了したことを確認してください。

+0

Thanks..Iは、ページの読み込みを待つためにも、time.sleepてみましたsuccess..Iずに暗黙的および明示的な待機を使用しようとしました.. – LBdoc

+0

あなたは、アイテムが再ロードされたために古くなっているのは間違いありませんが、私が知っている限り、アイテムがロードされるのを待つ問題ではありません。古くなったら、あなたはもう一度それらを見つけなければなりません。 – elethan

関連する問題