2016-08-12 8 views
0

Ich mache ein Selenium-Skript auf Python, das zu einer Kleinanzeigen-Seite geht, erhält die Informationen von einem meiner Beiträge, löscht es und den Repost es. Aber ich stecke hier fest: Gibt es eine Möglichkeit, den Text innerhalb des folgenden HTML zu erhalten und entweder als lokale Variable im Skript oder als Textdatei zu speichern?Wie bekomme ich den Text auf einer Spanne innerhalb div mit Selen auf Python.

Die Sache ist, ich versuche, das Skript generisch zu machen, und da der Text in meinem Beitrag variieren, Ich bin nicht sicher, ob das Finden von Xpath funktioniert. Gibt es eine Möglichkeit, das div anhand seiner ID anzusteuern und den darin enthaltenen Text zurückzugeben?

<div id="UserContent"> 
<table> 
    <tbody> 
     <tr> 
      <td> 
       <span itemprop="description"> 
        "Text I need" 
       </span> 
      </td> 
     </tr> 
    </tbody> 
</table> 
</div> 

Antwort

1

Der Text ist irrelevant, sollten Sie die ID usw. verwenden ..:

"//*[@id='UserContent']//span[@itemprop='description']//text()" 

So in Selen:

text = driver.find_element_by_xpath("//*[@id='UserContent']//span[@itemprop='description']").text 

Oder eine CSS-Selektor verwenden:

text = driver.find_element_by_css("#UserContent span[itemprop=description]").text 

Ein Beispiel verwenden lxml:

In [12]: from lxml import html 
In [13]: h = """<div id="UserContent"> 
    ....: <table> 
    ....:  <tbody> 
    ....:   <tr> 
    ....:    <td> 
    ....:     <span itemprop="description"> 
    ....:      "Text I need" 
    ....:     </span> 
    ....:     <span itemprop="foo">bar</span> 
    ....:    </td> 
    ....:   </tr> 
    ....:  </tbody> 
    ....: </table> 
    ....: </div> 
    ....: 
    ....: """ 
In [14]: tree = html.fromstring(h) 
In [15]: print(tree.cssselect("#UserContent span[itemprop=description]")[0].text) 

        "Text I need" 
In [16]: print(tree.xpath("//*[@id='UserContent']//span[@itemprop='description']//text()")[0]) 

        "Text I need" 


In [17]: 
+0

funktioniert perfekt, aber der Ausdruck: text = driver.find_element_by_xpath ("// * @ id = 'UserContent'] // Spanne [@ itemprop = 'description'] // Text() "). text Gab mir ein" ist: [object Text]. Es sollte ein Element sein. ". Ich nehme an, weil der innere" text() "am Ende des xpath mit dem .text draußen überflüssig war, Nachdem er es entfernt hat, hat es Wunder geweckt. Vielen Dank – Silver

+0

Kein Problem, ich mischte lxml und selen syntax mit text() und .text –

Verwandte Themen