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

2025-01-08 08:50:00
admin
原创
163
摘要:问题描述:我正在使用 Python 绑定来运行 Selenium WebDriver:from selenium import webdriver wd = webdriver.Firefox() 我知道我可以像这样抓住一个网络元素:elem = wd.find_element_by_css_selector...

问题描述:

我正在使用 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

Python 的 Selenium WebDriver 文档基本上不存在,并且我在代码中没有看到任何似乎可以启用该功能的内容。

访问元素 (及其子元素) 的 HTML 的最佳方法是什么?


解决方案 1:

您可以读取该属性来获取元素内容innerHTML的来源或者获取当前元素的来源。outerHTML

Python:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

西文:

element.GetAttribute("innerHTML");

红宝石:

element.attribute("innerHTML")

JavaScript的:

element.getAttribute('innerHTML');

PHP的:

$element->getAttribute('innerHTML');

已测试并能与之配合使用ChromeDriver

解决方案 2:

以下是使用 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'))

解决方案 3:

实际上,没有一种直接的方法可以获取 HTML 源代码webelement。您必须使用 JavaScript。我不太确定 Python 绑定,但您可以在 Java 中轻松做到这一点。我确信JavascriptExecutorPython 中一定有类似于类的东西。

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

解决方案 4:

在Ruby中,使用selenium-webdriver(2.32.1),有一个page_source包含整个页面源代码的方法。

解决方案 5:

其他答案提供了许多有关检索WebElement标记的详细信息。但是,一个重要的方面是,现代网站越来越多地实现JavaScript、ReactJS、jQuery、Ajax、Vue.js、Ember.js、GWT等来呈现DOM 树中的动态元素。因此,有必要等待元素及其子元素完全呈现后再检索标记。


Python

因此,理想情况下,您需要诱导WebDriverWait,visibility_of_element_located()并且可以使用以下任一定位器策略:

  • 使用get_attribute("outerHTML")

element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id")))
print(element.get_attribute("outerHTML"))
  • 使用execute_script()

element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#my-id")))
print(driver.execute_script("return arguments[0].outerHTML;", element))
  • 注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

解决方案 6:

它看起来已经过时了,但无论如何还是让它留在这里吧。在你的情况下,正确的做法是:

elem = wd.find_element_by_css_selector('#my-id')
html = wd.execute_script("return arguments[0].innerHTML;", elem)

或者

html = elem.get_attribute('innerHTML')

两者对我都适用(​​selenium-server-standalone-2.35.0)。

解决方案 7:

事实上,使用属性方法更简单、更直接。

使用 Ruby 与 Selenium 和 PageObject 宝石,以获取与某个元素相关的类,该行将是element.attribute(Class)

如果您想获取与元素相关的其他属性,则适用相同的概念。例如,如果我想要元素的字符串element.attribute(String), 。

解决方案 8:

带有 Selenium 2.53.0 的 Java

driver.getPageSource();

解决方案 9:

InnerHTML 将返回所选元素内的元素,而 outerHTML 将返回所选元素的内部 HTML

例子:

现在假设你的元素如下

<tr id="myRow"><td>A</td><td>B</td></tr>

innerHTML 元素输出

<td>A</td><td>B</td>

outerHTML 元素输出

<tr id="myRow"><td>A</td><td>B</td></tr>

实例:

http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_ Between_innerhtml_and_outerhtml_in_javascript_example.htm

下面您将看到根据不同绑定要求的语法。根据需要将其更改innerHTML为。outerHTML

Python:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

如果您想要整个页面 HTML,请使用以下代码:

driver.getPageSource();

解决方案 10:

更新 2022 Selenium 检索 HTML

首先,下载 Selenium WebDriver 的 Python 绑定。

  • 您可以从 Selenium 包的 PyPI 页面执行此操作。

  • 或者,可以使用 pip 安装 Selenium 包。Python 3.6 在标准库中提供了 pip。

方法 1

读取innerHTML属性以获取元素内容的来源。innerHTML是 DOM 元素的属性,其值是开始标记和结束标记之间的 HTML。

例如,下面代码中的 innerHTML 属性值为“text”

<p>
a text
</p>
element.get_attribute('innerHTML')

方法 2

读取outerHTML以获取具有当前元素的源。outerHTML是一个元素属性,其值是开始和结束标记之间的 HTML 以及所选元素本身的 HTML。

例如,代码的属性带有一个包含outerHTML的值。div`span`

<div>
<span>Hello there!</span>
</div>
ele.get_atrribute("outerHTML")

解决方案 11:

我希望这可以帮助:
http ://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

这里描述了 Java 方法:

java.lang.String    getText() 

但不幸的是它在 Python 中不可用。因此,您可以将方法名称从 Java 转换为 Python,然后使用现有方法尝试另一种逻辑,而无需获取整个页面源代码...

例如

 my_id = elem[0].get_attribute('my-id')

解决方案 12:

这对我来说非常顺畅。

element.get_attribute('innerHTML')

解决方案 13:

我喜欢的获取渲染后的 HTML 的方法如下:

driver.get("http://www.google.com")
body_html = driver.find_element_by_xpath("/html/body")
print body_html.text

但是,上述方法会删除所有标签(是的,嵌套标签也是如此),并且仅返回文本内容。如果您还想获取 HTML 标记,请使用下面的方法。

print body_html.getAttribute("innerHTML")

解决方案 14:

如果您对 Python 中的Selenium 远程控制解决方案感兴趣,以下是如何获取 innerHTML:

innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML")

解决方案 15:

使用 execute_script 获取 html

bs4(BeautifulSoup)也可以快速访问html标签。

from bs4 import BeautifulSoup
html = adriver.execute_script("return document.documentElement.outerHTML")
bs4_onepage_object=BeautifulSoup(html,"html.parser")
bs4_div_object=bs4_onepage_object.find_all("atag",class_="attribute")

解决方案 16:

在PHP Selenium WebDriver中,您可以像这样获取页面源代码:

$html = $driver->getPageSource();

或者像这样获取元素的 HTML:

// innerHTML if you need HTML of the element content
$html = $element->getDomProperty('outerHTML');

解决方案 17:

在当前版本的php-webdriver(1.12.0+)中你必须使用

$element->getDomProperty('innerHTML');

正如本期所指出的:https ://github.com/php-webdriver/php-webdriver/issues/929

解决方案 18:

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

此代码确实也可以从源代码获取 JavaScript!

解决方案 19:

在PHPUnit Selenium 测试中它是这样的:

$text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML');
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2525  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1542  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Filestage、Xebrio、Kintone、Monday、Celoxis、Backlog、BubblePPM、Plutio、Scoro。在当今快速变化的商业环境中,项目管理系统的选择成为企业成功的关键因素之一。许多企业在选购项目管理系统时,常常面临功能复杂、...
项目管理系统   0  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Plutio、Kantata、Kintone、LiquidPlanner、Motion、Smartsheet、Targa、QuickBase、Hive。在当今快节奏的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而,面对市...
开源项目管理软件   15  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Scoro、Wekan、Hubstaff、Kintone、Wrike、Filestage、Trello、Airtable、Paymo。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时常常面临诸多挑战,如任务分...
项目管理系统   7  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用