我使用Python绑定来运行Selenium WebDriver:

from selenium import webdriver
wd = webdriver.Firefox()

我知道我可以像这样抓取一个webelement:

elem = wd.find_element_by_css_selector('#my-id')

我知道我可以得到整页的源代码…

wd.page_source

但是是否有一种获取“元素源”的方法?

elem.source   # <-- returns the HTML as a string

Python的Selenium WebDriver文档基本上不存在,我在代码中没有看到任何支持该功能的东西。

访问一个元素(及其子元素)的HTML的最佳方法是什么?


当前回答

这对我来说非常有效。

element.get_attribute('innerHTML')

其他回答

实际上,使用属性方法更简单、更直接。

将Ruby与Selenium和PageObject宝石一起使用,以获得与某个元素相关联的类,行代码为element.attribute(class)。

如果您希望获得与元素绑定的其他属性,同样的概念也适用。例如,如果我想要一个元素的字符串,element.attribute(string)。

在PHP Selenium WebDriver中,你可以像这样获得页面源代码:

$html = $driver->getPageSource();

或者像这样获取元素的HTML:

// innerHTML if you need HTML of the element content
$html = $element->getDomProperty('outerHTML');

获得我喜欢的渲染HTML的方法如下:

driver.get("http://www.google.com")
body_html = driver.find_element_by_xpath("/html/body")
print body_html.text

但是,上面的方法删除了所有的标记(是的,嵌套标记也是如此),只返回文本内容。如果您对获取HTML标记也感兴趣,那么可以使用下面的方法。

print body_html.getAttribute("innerHTML")

InnerHTML将返回所选元素内部的元素,outerHTML将返回所选元素的内部HTML

例子:

现在假设您的Element如下所示

<tr id="myRow"><td>A</td><td>B</td></tr>

innerHTML元素输出

<td>A</td><td>B</td>

outerHTML元素输出

<tr id="myRow"><td>A</td><td>B</td></tr>

生活例子:

http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm

下面你会发现语法需要根据不同的绑定。根据需要将innerHTML更改为outerHTML。

Python:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

如果你想要整个页面的HTML,使用下面的代码:

driver.getPageSource();

在Ruby中,使用selenium-webdriver(2.32.1),有一个包含整个页面源代码的page_source方法。