2016-04-06 8 views
1

Ich möchte Text innerhalb eines Div nach einer Spanne auswählen.Python Selen Wie bekomme ich Text von einem div nach einer Spanne

Quelle sieht wie folgt aus:

<div id="citation"> 
    <cite>Journal</cite> 
    ", " 
    <span class="year">2014</span> 
    ", " 
    <span class="volume">100</span> 
    " (4), pp 100-200" 
</div> 

ich nur das wollen "(4), S. 100-200".

Ich weiß, wie man Text aus dem gesamten div oder jeder span, aber wie greife ich nur den letzten Text? Dieser XPATH wird nicht funktionieren. ISSUE_XPATH = "// * [@ id = \" citation \ "]/text() [3]"

und zeigt diese Fehlermeldung:

selenium.common.exceptions.InvalidSelectorException: Nachricht: {“ errorMessage ":" Das Ergebnis des Xpath-Ausdrucks \ "// * [@ id = \" citation \ "]/text() [3] \" ist: [object Text]. Es sollte ein Element sein. "

Antwort

1

Leider wird //*[@id=\"citation\"]/text()[3] in Selen nicht funktionieren - Sie können nur tatsächliche Elemente, nicht Textknoten ausrichten.

Was ich in diesem Fall tun würde, ist zusätzlich BeautifulSoup HTML-Parser zu verwenden, das einen bestimmten Text Geschwister nach dem span Elemente mit class="volume" lokalisieren helfen würde:

from bs4 import BeautifulSoup 

citation = driver.find_element_by_id("citation") 
html = citation.get_attribute("outerHTML") 

soup = BeautifulSoup(html, "html.parser") 
desired_text = soup.find("span", class_="volume").next_sibling 
print(desired_text) 
+0

Dank! Ich habe diesen Code ausprobiert, aber ich bekomme diesen Fehler immer wieder: 'AttributeError: 'NoneType' Objekt hat kein Attribut 'next_sibling'' Ich weiß nicht warum. – moglido

+0

@moglido was ist, wenn Sie "html" drucken - was bekommen Sie? Vielen Dank. – alecxe

+0

Drucken von HTML gibt mir die html von der Div oben. Es sind jedoch keine Anführungszeichen um den Text in der Terminalausgabe vorhanden. – moglido

Verwandte Themen