2009-11-29 75 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') 
相关问题