我正在查看的页面包含:
<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知道如何找到元素。
有没有人有更好的解决方案? 谢谢:))
答案 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')