在Python中使用Selenium WebDriver获取WebElement的HTML源代码

662 投票
19 回答
720304 浏览
提问于 2025-04-17 00:59

我正在使用Python的库来运行Selenium WebDriver:

from selenium import webdriver
wd = webdriver.Firefox()

我知道我可以这样获取一个网页元素:

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

而且我知道我可以用这个方法获取整个页面的源代码...

wd.page_source

但是有没有办法获取“元素的源代码”?

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

Selenium WebDriver的Python文档几乎没有,我在代码中也没看到有什么能实现这个功能的东西。

获取一个元素(以及它的子元素)的HTML的最佳方法是什么?

19 个回答

100

下面是使用Selenium和Python获取网页的HTML源代码的方法:

elem = driver.find_element("xpath", "//*")
source_code = elem.get_attribute("outerHTML")

接下来是如何把这个HTML保存到一个文件里的方法:

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

其实获取一个网页元素的HTML源代码并没有特别简单的方法。你需要用到JavaScript。我对Python的相关库不是很了解,但在Java中你可以很容易地这样做。我相信在Python中也一定有类似于JavascriptExecutor这个类的东西。

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

你可以通过读取 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 上运行良好。

撰写回答