我使用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')

其他回答

其他答案提供了大量关于检索WebElement标记的细节。然而,一个重要的方面是,现代网站越来越多地实现JavaScript, ReactJS, jQuery, Ajax, Vue.js, Ember.js, GWT等来呈现DOM树中的动态元素。因此,在检索标记之前,有必要等待元素及其子元素完全呈现。


Python

因此,理想情况下,你需要为visibility_of_element_locate()诱导WebDriverWait,你可以使用以下定位器策略之一:

Using get_attribute("outerHTML"): element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id"))) print(element.get_attribute("outerHTML")) Using execute_script(): element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id"))) print(driver.execute_script("return arguments[0].outerHTML;", element)) Note: You have to add the following imports: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

您可以读取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上进行了测试和使用。

更新了2022硒检索HTML

首先,下载Selenium WebDriver的Python绑定。

可以从Selenium包的PyPI页面执行此操作。 或者,也可以使用pip来安装Selenium包。Python 3.6在标准库中提供了pip。

方法1

读取innerHTML属性以获得元素内容的源。innerHTML是DOM元素的属性,它的值是开始标记和结束标记之间的HTML。

例如,下面代码中的innerHTML属性包含值" text "

<p>
a text
</p>
element.get_attribute('innerHTML')

方法2

读取outerHTML以获得带有当前元素的源代码。outerHTML是一个元素属性,其值是开始和结束标记之间的HTML以及所选元素本身的HTML。

例如,代码的outerHTML属性携带了一个包含div和span的值。

<div>
<span>Hello there!</span>
</div>
ele.get_atrribute("outerHTML")

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

$html = $driver->getPageSource();

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

// innerHTML if you need HTML of the element content
$html = $element->getDomProperty('outerHTML');
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 

这段代码真的可以从源代码获得JavaScript !