2016-07-30 16 views
-1

Ich möchte zu Seite1 gehen dann klicken Sie auf eine andere Schaltfläche für die Ausrichtung auf Seite2 dann klicken Sie auf einen Link, der auf Seite2 ist. Mein Code:Ich konnte nicht auf den Link klicken

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() 

Ich habe warten, aber es gibt immer noch den Fehler:

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

+0

Ich konnte kein Element mit "FACTS ABOUT ME" als seinen Linktext finden, –

+0

Ich versuchte es mit 'find_element_by_css_selector (" a [title = 'FAKTEN ÜBER MICH'] "), es funktionierte für mich. Können Sie bitte 'find_by_css_selector' anstelle von' LINK_TEXT' verwenden? –

Antwort

0

Wenn ein Element einfach nicht in dem DOM überhaupt ist, wird es eine NoSuchElementException werfen. Sie sagen, dass Sie eine StaleElementReferenceException erhalten haben. Diese Ausnahme tritt auf, wenn der Webtreiber nach einem übereinstimmenden Element sucht und eines findet. Sie haben dann einen Verweis auf dieses Element, aber bevor Sie darauf klicken, wird das Element, mit dem es verknüpft ist, aus dem DOM entfernt. Dies liegt oft daran, dass eine JavaScript-Bibliothek das DOM dynamisch geändert und den Knoten von der Seite entfernt und dann einen neuen an seiner Stelle abgelegt hat. Es erscheint (visuell) immer noch auf der Seite, aber die Elementinstanz, die der Fahrer zuvor gefunden hatte, ist nicht mehr vorhanden. Wenn Sie sich auf einer Website befinden, die JavaScript wie diese verwendet, können Sie den Speicherort und die Ausführung in einer Schleife umbrechen und versuchen, es erneut zu versuchen.

+0

Ich meine, mache eine Schleife (mit einer Art Timeout oder n Mal, wenn etwas schief geht) und suche das Element (zB 'driver.find_element_by_xpath') und klicke auf das Element innerhalb der Schleife (und auch innerhalb eines try catch-Blocks, der StaleElementReference-Ausnahmen ignoriert –

Verwandte Themen