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


当前回答

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

其他回答

您可以读取innerHTML属性以获取元素内容的源,也可以读取outerHTML以获取带有当前元素的源。

Python:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

C#:

element.GetAttribute("innerHTML");

Ruby:

element.attribute("innerHTML")

JavaScript:

element.getAttribute('innerHTML');

PHP:

$element->getAttribute('innerHTML');

它在ChromeDriver上进行了测试和使用。

实际上没有一种直接的方法来获取web元素的HTML源代码。你必须使用JavaScript。我不太确定python绑定,但在Java中可以很容易地这样做。我相信在Python中一定有类似JavascriptExecutor类的东西。

 WebElement element = driver.findElement(By.id("foo"));
 String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);

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

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

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

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

$html = $driver->getPageSource();

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

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