如何在 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 Webdriver捕获特定元素而不是整个页面的屏幕截图?