2009-11-29 120 views
7

我期待在該頁面包含:如何使用硒獲取特定元素的html源代碼?

<div id='1'> <p> text 1 <h1> text 2 </h1> text 3 <p> text 4 </p> </p> </div> 

我想所有的文本在div,除了那就是在<h>文本。 (我想獲得「text 1」,「text 3」和「text 4」) 可能有幾個<h>元素,或根本沒有。 並且可能有幾個<p>元素,即使是一個在另一個裏面,或者沒有。

我以爲通過獲取div的所有html源代碼,並使用正則表達式來刪除<h>元素。但是,selenium.get_text不會返回HTML,只是文本(全部!)。

我知道我可以使用selenium.get_html_source然後用正則表達式尋找我需要的元素,但是看起來像是浪費,因爲硒知道如何找到元素。

有沒有人有更好的解決方案? 謝謝:)

回答

9

下面的代碼會給你的div元素的HTML:

sel = selenium('localhost', 4444, browser, my_url) 
html = sel.get_eval("this.browserbot.getCurrentWindow().document.getElementById('1').innerHTML") 

那麼你可以使用BeautifulSoup來分析它,並提取你真正想要的。

我希望它能幫助

+0

謝謝!它解決了這個問題:) – Rivka 2009-11-30 07:39:21

+0

所以你爲什麼不接受答覆? :) – luc 2009-11-30 08:03:47

+0

對不起,我是新的在這個網站... 你的意思是點擊v,對不對? – Rivka 2009-11-30 08:17:17

1

如何使用jQuery?

編輯:

首先,你必須添加所需的.js文件,針對前往www.jQuery.com。

然後,所有你需要做的就是調用一個簡單的jQuery選擇:

alert($("div#1").html()); 
+0

我不知道jQuery。你能給我一個例子嗎? 謝謝! – Rivka 2009-11-29 18:08:33

4

使用XPath。從selenium.py

沒有一個明確的定位前綴,硒使用以下默認策略:

  • \ ** ** DOM \,開始用定位器 「的文件。」
  • \ ** **的XPath \,開始以 「//」
  • \ ** **標識\定位器,否則

在你的情況,你可以嘗試

selenium.get_text("//div[@id='1']/descendant::*[not(self::h1)]") 

您可以瞭解更多有關xpath here的信息。

P.S.我不知道是否有可用於python-selenium的良好HTML文檔,但我沒有找到任何;另一方面,selenium.py文件的文檔似乎構成了全面的文檔。所以我建議查找源代碼以更好地理解它的工作原理。

0

選定的答案並不在Python 3,在寫作的時候工作。而是用這個:

from selenium import webdriver 

wd = webdriver.Firefox() 
wd.get(url) 
return wd.execute_script('return window.document.getElementById('1').innerHTML') 
相關問題