如何使用selenium获取特定元素的html源代码?

时间:2009-11-29 18:05:20

标签: python selenium

我正在查看的页面包含:

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

我想获取div中的所有文本,但<h>中的文本除外。 (我想得到“文字1”,“文字3”和“文字4”) 可能有一些<h>元素,或根本没有元素。 并且可能有一些<p>元素,甚至一个在另一个内部,或者没有。

我想通过获取div的所有html源代码并使用正则表达式删除<h>元素来实现此目的。但selenium.get_text不会返回html,只返回文本(全部!)。

我知道我可以使用selenium.get_html_source然后用正则表达式查找我需要的元素,但这看起来很浪费,因为selenium知道如何找到元素。

有没有人有更好的解决方案? 谢谢:))

4 个答案:

答案 0 :(得分:9)

以下代码将为您提供div元素中的HTML:

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

然后你可以使用BeautifulSoup来解析它并提取你真正想要的东西。

我希望它有所帮助

答案 1 :(得分:4)

使用xpath。来自selenium.py

  

如果没有明确的定位器前缀,Selenium将使用以下默认策略:

     
      
  • \ ** dom ** \,用于以“document。”开头的定位器。
  •   
  • \ ** xpath ** \,用于以“//”
  • 开头的定位器   
  • \ ** identifier ** \,否则
  •   

在您的情况下,您可以尝试

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

您可以详细了解xpath here

P.S。我不知道是否有适用于python-selenium的HTML文档,但我还没有找到;另一方面,selenium.py文件的文档字符串似乎构成了全面的文档。因此,我建议查找源代码,以便更好地了解其工作原理。

答案 2 :(得分:1)

使用jQuery怎么样?

修改

首先,您必须添加所需的.JS文件,然后转到www.jQuery.com。

然后你需要做的就是调用一个简单的jQuery选择器:

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

答案 3 :(得分:0)

在撰写本文时,所选答案在Python 3中不起作用。而是使用它:

from selenium import webdriver

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