我使用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的最佳方法是什么?


当前回答

我希望这能有所帮助: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

下面介绍Java方法:

java.lang.String    getText() 

但不幸的是,它在Python中不可用。因此,您可以将方法名称从Java转换为Python,并尝试使用现有方法的另一种逻辑,而无需获得整个页面的源代码……

E.g.

 my_id = elem[0].get_attribute('my-id')

其他回答

如果你对Python中Selenium Remote Control的解决方案感兴趣,下面是如何获取innerHTML:

innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML")

当然,我们可以用下面的脚本在Selenium Python中获得所有的HTML源代码:

elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")

如果你想保存到文件:

with open('c:/html_source_code.html', 'w') as f:
f.write(source_code.encode('utf-8'))

我建议保存到一个文件,因为源代码非常非常长。

在PHPUnit Selenium测试中,它是这样的:

$text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML');

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

这对我来说非常有效。

element.get_attribute('innerHTML')