2016-05-09 13 views
0

Der Teil I zu klicken bin versucht:Weird-Python Selen-Knopf klicken, Verhalten

<ul class="btns right"> 
<li><a href="javascript:void(0)" onclick="hr_expand_event_tab_all(&quot;&quot;)" class="expand-all" id="btn_expand_all_10580503">View All Cards</a></li> 
</ul> 

Ziemlich einfach, dachte ich. Aber ich vermisse etwas.

Die Frage ist jetzt ein wenig weiter unten auf der Seite aktualisiert. Der Xpath ist nicht das Problem, das ich mit korrigiertem Xpath versucht habe, und es ist das gleiche wie mit dem Klassennamen. CSS hat mehrere Versionen der Schaltfläche versteckt, aber eine allgemeine.Exception wird auf diejenigen geworfen, die tatsächlich mit xpath oder dem Klassennamen gefunden werden.

Ich habe überprüft, die Seite ist richtig geladen und das Element ist da. Ich habe einen Check, um zu warten, bis die ganze Seite geladen ist und Screenshots, um sicher zu gehen.

loadbutton = Driver.find_element_by_xpath("//a[@class='expand-all']") 

Gibt:

<class 'selenium.common.exceptions.ElementNotVisibleException'> 

So habe ich versucht, einen Onclick mit dem Anker zu finden:

loadbutton = Driver.find_element_by_xpath("//li[contains(@onclick, 'View All Cards')]") 

Mit dem gleichen Ergebnis. Ich habe ein bisschen Regex ausprobiert, um die ID-Varianten zu erfassen, aber ich bin mir nicht sicher, wo ich hier falsch liege. Es gibt ein Onlick und es ist geladen, aber ich kann es nicht finden.

Ich würde jemanden schätzen, der mir zeigen kann, was ich an diesem hier falsch mache.

/Update:

Stellt sich heraus, es gibt mehrere Versionen der Taste einige sichtbar sind und andere nicht.

I geschlungen:

loadbutton = Driver.find_elements_by_xpath("//a[@class='expand-all']") 
for button in loadbutton: 
    print "button found" 

Es mehrere Ergebnisse auftauchten. Die früheren sind versteckt, aber die am Ende sind sicherlich in meinem Browser und dem Screenshot angezeigt. Also habe ich erwartet, dass die ersten fehlschlagen und habe einen .click() mit einem Versuch hinzugefügt: außer: und sie alle haben immer noch versagt. Ich habe das nicht erwartet.

Weitere Update:

So lief ich dies:

loadbutton = Driver.find_elements_by_xpath("//a[@class='expand-all']") 
for button in loadbutton: 
    print "button found" 
    try: 
    button.click() 
    except: 
    e = sys.exc_info()[0] 
    print e 

Das erste Paar gab mir dies:

<class 'selenium.common.exceptions.ElementNotVisibleException'> 

OK erwartet die CSS es versteckt ist. Die letzten beiden, die das gab angezeigten:

<class 'selenium.common.exceptions.WebDriverException'> 

So kann er sie sehen. Es wird nicht auf sie klicken. "Gemeinsame Ausnahme" scheint nicht allzu hilfreich zu sein.

+0

Scheint so, als ob die Schaltfläche mit CSS versteckt ist. Können Sie die Schaltfläche sehen, wenn Sie diese Seite in Ihrem Browser aufrufen? – Tony

+0

** // */a [enthält (text(), 'Alle Karten anzeigen')] ** versuche diesen xpath, deine xpath-Konstruktion scheint falsch zu sein – theRoot

+0

Warum all das mit xpath zu tun, wenn die Taste eine ID hat? – e4c5

Antwort

2

Versuchen Sie, diese XPath (mit Code-Block aktualisiert SO Seite ist mein * entfernt)

//*[contains(concat(' ', @class, ' '), ' btns right ')]//*[contains(concat(' ', @class, ' '), ' expand-all ') and contains(text(), 'View All Cards')]

etwas warten Bitte geben Sie für das Element anklickbar zu sein (implizit empfohlen).

Ich habe nur für Java verwendet, aber ich habe hier für Python here verwiesen kann es helfen !!

from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver, 10) 
button = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[contains(concat(' ', @class, ' '), ' btns right ')]//*[contains(concat(' ', @class, ' '), ' expand-all ') and contains(text(), 'View All Cards')]'))) 
button.click() 


Even if the above thing fails, try this 

bilden diese Verbindungen link1 und link2

driver.execute_script("document.getElementsByClassName('expand-all')[0].click();") 

ein künstliches auf das gewünschte Element injizieren, entfernen (Kommentar) Alle anderen Codes

ur app fallen unter link2 OP sein kann :)

+0

Danke für den Vorschlag. Es wirft InvalidSelectorException und das XPath ist weit über mich hinaus, so dass ich keine Möglichkeit zum Debuggen habe. Das sagte nur aktualisiert die Frage erneut, ich glaube nicht, das Problem ist, sie durch die von css scheitern zu finden, scheitern, weil sie nicht gefunden werden, wenn es um das Klicken kommt, aber die späteren werfen nur eine häufige Ausnahme. Das sagt mir, dass es nur möglich ist, sie mithilfe der Klasse zu finden. Aus irgendeinem Grund kann man sie nicht anklicken. – PoweredByCoffee

+0

Hey versuchen Sie die aktualisierte, SO Antwortprüfer entfernt (*) in meinen Antworten ... – theRoot

+0

Works und beeindruckende Xpath, aber die gleichen Ergebnisse wie die Verwendung des Klassennamens leider erhalten. – PoweredByCoffee