如何在 selenium 驱动程序中获取整个页面的 innerHTML?

Posted

技术标签:

【中文标题】如何在 selenium 驱动程序中获取整个页面的 innerHTML?【英文标题】:How to get innerHTML of whole page in selenium driver? 【发布时间】:2016-06-24 15:35:45 【问题描述】:

我使用selenium点击我想要的网页,然后使用Beautiful Soup解析网页。

有人显示how to get inner html of an element in a Selenium WebDriver。有没有办法获取整个页面的 HTML?谢谢

Python中的示例代码 (根据上面的帖子,语言似乎无关紧要):

from selenium import webdriver
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup


url = 'http://www.google.com'
driver = webdriver.Firefox()
driver.get(url)

the_html = driver---somehow----.get_attribute('innerHTML')
bs = BeautifulSoup(the_html, 'html.parser')

【问题讨论】:

【参考方案1】:

获取整个页面的 HTML:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://***.com")

html = driver.page_source

获取外部 HTML(包括标签):

# HTML from `<html>`
html = driver.execute_script("return document.documentElement.outerHTML;")

# HTML from `<body>`
html = driver.execute_script("return document.body.outerHTML;")

# HTML from element with some javascript
element = driver.find_element_by_css_selector("#hireme")
html = driver.execute_script("return arguments[0].outerHTML;", element)

# HTML from element with `get_attribute`
element = driver.find_element_by_css_selector("#hireme")
html = element.get_attribute('outerHTML')

获取内部 HTML(不包括标签):

# HTML from `<html>`
html = driver.execute_script("return document.documentElement.innerHTML;")

# HTML from `<body>`
html = driver.execute_script("return document.body.innerHTML;")

# HTML from element with some JavaScript
element = driver.find_element_by_css_selector("#hireme")
html = driver.execute_script("return arguments[0].innerHTML;", element)

# HTML from element with `get_attribute`
element = driver.find_element_by_css_selector("#hireme")
html = element.get_attribute('innerHTML')

【讨论】:

感谢@florentbr。 OP 中提到的帖子中的元素似乎有一个更简单的答案,element.get_attribute('innerHTML') ---- 你对同一件事的回答是否相同,或者哪个更强大/更灵活?【参考方案2】:

driver.page_source 可能已经过时了。以下为我工作

let html = await driver.getPageSource();

参考:https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/ie_exports_Driver.html#getPageSource

【讨论】:

为了后代,一个简短的说明,@Florent B. 上面的答案是指 Python API,而这个是 JavaScript 等价物。 如何在 Python 中做到这一点?【参考方案3】:

在 Java 中使用页面对象:

    @FindBy(xpath = "xapth")
    private WebElement element;

    public String getInnnerHtml() 
        System.out.println(waitUntilElementToBeClickable(element, 10).getAttribute("innerHTML"));
        return waitUntilElementToBeClickable(element, 10).getAttribute("innerHTML")
    

【讨论】:

【参考方案4】:

一个 C# sn-p 供我们这些可能想在某一天复制/粘贴一些工作代码的人使用

var element = yourWebDriver.FindElement(By.TagName("html"));
string outerHTML = element.GetAttribute(nameof(outerHTML));

感谢那些在我之前回答的人。未来任何人如果从 C# 的 sn-p 中受益,它会在 Selenium 测试中获取任何页面元素的 HTML,请考虑对此答案进行投票或发表评论。

【讨论】:

以上是关于如何在 selenium 驱动程序中获取整个页面的 innerHTML?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Selenium 获取整个页面的内容 [重复]

如何使用Selenium Webdriver捕获特定元素而不是整个页面的屏幕截图?

python下用selenium如何获取页面显示的文本内容

Selenium 页面加载慢

如何使用Selenium在页面中的多个子选项卡中传递驱动程序实例?

Selenium(Python)页面对象+数据驱动测试框架