在Python中使用Selenium WebDriver获取WebElement的HTML源代码
我正在使用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
上运行良好。