【问题标题】:How to get innerHTML of whole page in selenium driver?如何在 selenium 驱动程序中获取整个页面的 innerHTML?
【发布时间】: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')

【问题讨论】:

    标签: selenium


    【解决方案1】:

    获取整个页面的 HTML:

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get("http://stackoverflow.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,请考虑对此答案进行投票或发表评论。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 2018-07-24
        相关资源
        最近更新 更多