Selenium-Python: find_element_by_css_selector() Verwendung :enthält()
In Selen, auf Python, ich versuche ein element wählen, mit
driver = webdriver.Firefox()
driver.find_element_by_css_selector("td:contains('hello world')")
Gibt mir die Fehlermeldung:
>>>> selenium.common.exceptions.WebDriverException: Message: u'An invalid or illegal string was specified'
Kann ich wählen Sie Elemente mit vielen verschiedenen CSS-Selektoren auf diese Weise, aber unter Verwendung von :contains() scheint immer zu werfen ist ein Fehler. HINWEIS: ich bekomme die gleiche Fehlermeldung, wenn ich versuche zu verwenden:
driver.find_element_by_xpath("//td[contains(text(),'hello world')]")
Bitte beraten. Danke!
EDIT: GELÖST!
Problem gelöst! Ich danke Ihnen so sehr für Ihre Hilfe! Ich hatte zwei bedeutende Fehler:
1.) Ich dachte,: contains() war eine anerkannte css3-Selektor (stellt sich heraus, es ist nicht Teil der aktuellen Skillung, die ist, warum ich nicht wählen diesen Weg)
2.) Die xpath-Selektor wäre gut, außer, dass ich mit einem parser, der angenommen xpath würde niemals irgendwelche Bereiche in der it, so spaltete es die Argumente durch Leerzeichen. Also, wenn ich ging in die xpath-Selektor
//td[contains(text(),'hello world']
den parser abgeschnitten wurde, es auf das Leerzeichen nach 'Hallo' also der xpath-Selektor sah aus wie
//td[contains(text(),'hello
denen deutlich würde einen Fehler auslösen. Also muss ich die Lautstärke meiner Analyse richtig zu Lesen, meine xpath-Selektor.
Nochmals vielen Dank für all Eure schnellen, hilfreichen Antworten!
- zeigen Sie uns den html-Inhalt bitte..
- CSS-Selektoren habe nicht alles genannt, wie
contains
.. cssselect
hat die Unterstützung für:contains()
pseudo-Selektor, aber es bezieht sich auf eine frühe CSS3-Entwurf, der entfernt wurde (pythonhosted.org/cssselect/#supported-selectors). Ich bin mir nicht bewusst andere Projekte zur Unterstützung dieser pseuso-Selektor- das ist jQery ein - api.jquery.com/contains-selector . Selen unterstützt nicht, dass jQuery ein..
- die
contains
Selektor jQuery hat, stammt eigentlich von Sizzle, nicht jQuery. - Nächstes mal bitte echten code zeigen!
- Ich hätte gerne eine Karte den richtigen code, aber die Abstraktionen in den Weg kam, zu viel. Es war etwa 200 Zeilen code, die beteiligt waren, in der immer der string von der ersten Seite an die Stelle, wo Selen wurde. Es würde geschaut haben, sehr unübersichtlich.
- dann sollten Sie machen es zu einem einfach reproduzierbaren Szenario. Wie konnten wir wissen, es war immer abgeschnitten? Sie nicht liefern uns mit dem eigentlichen XPath-Sie waren läuft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersetzen
find_element_by_xpath_selector
mitfind_element_by_xpath
(Es gibt keinefind_element_by_xpath_selector
- Methode):KOMPLETTES BEISPIEL
br.find_element_by_xpath(u"//td[contains(text(), 'hello')]")
? was istbr
?br
kommt aus meiner spike-Lösung. Danke für den Kommentar.driver.find_element_by_xpath(u"//td
? was istu
?Du machst falsche Weg. Erstellen Sie zunächst ein Treiber-Objekt, wie unten:
Navigieren Sie dann zu der gewünschten url als unten:
Dann auf, dass
driver
- Objekt rufen Sie die gewünschte Methode. Es gibt keine enthältCSS-Selektoren
. Sie können weiter gehen mit dieser Methodefind_element_by_xpath
wie folgt :Statt
können Sie diese option verwenden zu:
Hinweis: * in css_selector funktioniert gleich wie in XPath
Referenz:
https://saucelabs.com/resources/articles/selenium-tips-css-selectors
*=
(wie^=
und$=
) wird verwendet für die Auswahl von ATTRIBUTEN der Elemente, NICHT der INNERE TEXT dieser Elemente.