2017-02-05 8 views
0

Ich benutze Python & Selen, um den Inhalt einer bestimmten Webseite zu verschrotten. Derzeit habe ich das folgende Problem: Es gibt mehrere Div-Klassen mit dem gleichen Namen, aber jede Div-Klasse hat unterschiedliche Inhalte. Ich brauche nur die Informationen für eine bestimmte Div-Klasse. Im folgende Beispiel mag ich die Informationen, die in dem ersten „show_result“ braucht -Klasse, da gibt es das „Wichtig-Element“ im Link-Text:Selenium-Python: Klasse mit Link-Text

<div class="show_result"> 
    <a href="?submitaction=showMoreid=77" title="Go-here"> 
    <span class="new">Important-Element</span></a> 
    Other text, links, etc within the class... 
</div> 

<div class="show_result"> 
    <a href="?submitaction=showMoreid=78" title="Go-here"> 
    <span class="new">Not-Important-Element</span></a> 
    Other text, links, etc within the class... 
</div> 

<div class="show_result"> 
    <a href="?submitaction=showMoreid=79" title="Go-here"> 
    <span class="new">Not-Important-Element</span></a> 
    Other text, links, etc within the class... 
</div> 

Mit folgendem Code kann ich die " Wichtig-Element "und sein Link: driver.find_element_by_partial_link_text('Important-Element'). Ich brauche aber auch die anderen Informationen innerhalb derselben Div-Klasse "Show-Ergebnis". Wie kann ich auf die gesamte div-Klasse verweisen, die das Important-Element im Linktext enthält? driver.find_elements_by_class_name('show_result') funktioniert nicht, da ich nicht weiß, in welcher der div-Klassen das Important-Element liegt.

Danke, Finn

Bearbeiten/Update: Ups, ich habe die Lösung auf meinem eigenen mit XPath gefunden:

driver.find_element_by_xpath("//div[contains(@class, 'show_result') and contains(., 'Important-Element')]") 
+0

Sie können füge es als Antwort hinzu und akzeptiere es :) – lauda

Antwort

0

Ich weiß, Sie haben eine Antwort gefunden, aber ich glaube, dass es falsch ist, da Sie auch die anderen Knoten wegen Imp wählen würden ortant-Element befindet sich immer noch im Non-Important-Element.

Vielleicht funktioniert es für Ihren speziellen Fall, da das nicht wirklich der Text ist, nach dem Sie suchen. Aber hier sind ein paar Antworten:

  1. //div[@class='show_result' and starts-with(.,'Important-Element')]

  2. //div[span[text()='Important-Element']]

  3. //div[contains(span/text(),'Important-Element') and not(contains(span/text(),'Non'))]

Es gibt mehr Möglichkeiten, dies zu schreiben ...

+0

Danke, du hast eigentlich recht. Meine Lösung funktionierte in meinem Fall, da der Name für die Elemente nicht "Important-Element" und "Not-Important-Element" usw. war. Sie hatten sich gegenseitig ausschließende Namen a la "Zebra", "Gorilla" usw. und daher meine Xpath-enthält gearbeitet. –

0

Ups, fand ich die Lösung auf meiner eigenen über XPath:

Verwandte Themen