2016-07-30 13 views
-1

私はpage1に行き、次にpage2に向かうための他のボタンをクリックしてからpage2にあるリンクをクリックします。 マイコード:リンクをクリックできません

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
import selenium.webdriver.support.ui as UI 

d = webdriver.Firefox() 
d.get("https://www.youtube.com/") 
d.find_element_by_xpath('//*[@id="appbar-nav"]/ul/li[2]/a/span').click() 
wait = UI.WebDriverWait(d, 20) 
next_page_link = wait.until(
EC.element_to_be_clickable((By.LINK_TEXT, 'FACTS ABOUT ME'))) 
next_page_link.click() 

私は待機を追加しましたが、それはまだエラーを与える:要素が全くDOMに単純ではありません

raise exception_class(message, screen, stacktrace) selenium.common.exceptions.StaleElementReferenceException: Message: Element is no longer attached to the DOM

+0

リンクテキストに「FACTS ABOUT ME」の要素が見つかりませんでした。 –

+0

私は 'find_element_by_css_selector(" a = title = 'FACTS ABOUT ME'] ') 'を試してみました。 'LINK_TEXT'の代わりに' find_by_css_selector'を使ってみてください。 –

答えて

0

場合、それははNoSuchElementExceptionがスローされます。あなたはStaleElementReferenceExceptionを受け取ったと言っています。この例外は、Webドライバが一致する要素を検索して見つかった場合に発生します。その要素への参照がありますが、その要素をクリックする前に、その要素がDOMから削除されます。これは、JavaScriptライブラリがDOMを動的に変更してページからノードを削除し、新しい場所をその場所に配置するためです。ページにはまだ(視覚的に)表示されますが、以前に見つかった要素インスタンスはもう存在しません。このようなJavaScriptを使用するサイトにいる場合、実際に処理する唯一の方法は、ループ内で位置と実行をラップして、tryキャッチをもう一度やり直すことです。

+0

私は、ある種のタイムアウトや何かが間違っている場合に何回かのタイムアウトを使ってループを行い、その要素の検索を行い(例えば 'driver.find_element_by_xpath')、ループ内の要素をクリックすることを意味しますまた、StaleElementReference例外を無視するtry catchブロックの内部 –

関連する問題