html中意外的标记for怎么处理_selenium中的text、innerText、outerText以及textContent比较...

在使用selenium过程中为了获取元素的文本内容,通过搜索引擎搜索发现常用的方式是获取

元素的text、innerText、outerText以及textContent。在使用过程中难免会有一些疑惑,这四者之间的区别是什么。

根据搜索引擎和自己实验的结果,我总结出以下几条信息。

一、元素的 innerHTML、outerHTML、innerText、outerText属性之间的区别

以下内容参考链接 https://www.cnblogs.com/yuer20180726/p/11135575.html整理和修改

先看一个示例代码

Text in DIV

#python相关代码from selenium import webdriverimport seleniumprint('谷歌浏览器: 83.0.4103.116')print("selenium版本号:" + selenium.__version__)browser = webdriver.Chrome(r'C:/chromedriver.exe')browser.get("file:///C:/test.html")table = browser.find_element_by_xpath('//*[@id="testdiv"]')print("-------text---------")print(table.text)print("-------innerText---------")print(table.get_attribute("innerText"))print("-------outerText---------")print(table.get_attribute("outerText"))print("-------textContent---------")print(table.get_attribute("textContent"))print("-------innerHTML---------")print(table.get_attribute("innerHTML"))print("-------outerHTML----------")print(table.get_attribute('outerHTML'))browser.quit()
#运行结果谷歌浏览器: 83.0.4103.116selenium版本号:3.141.0-------text---------Text in DIV-------innerText---------Text in DIV-------outerText---------Text in DIV-------textContent---------Text in DIV-------innerHTML---------

Text in DIV

-------outerHTML----------

Text in DIV

document对象中有innerHTML、innerText这两个属性,都是获取document对象文本内容,但使用起来还是有区别的;

1) innerHTML设置或获取标签所包含的HTML+文本信息(从标签起始位置到终止位置全部内容,包括HTML标签,但不包括自身)

2) outerHTML设置或获取标签自身及其所包含的HTML+文本信息(包括自身)

3) innerText设置或获取标签所包含的文本信息(从标签起始位置到终止位置的内容,去除HTML标签,但不包括自身)

4) outerText设置或获取标签自身及其所包含的文本信息(包括自身)

2131437e2c28445ad92498fec0837d81.gif

各属性之间的范围

innerText和outerText在获取的时候是相同效果,但在设置时,innerText仅设置标签所包含的文本,而outerText设置包含包括标签自身在内的文本。

根据上面的代码,发现无论怎么样设置元素值获取innerText和outerText值都一样。于是我继续搜索,参考https://www.iteye.com/blog/walsh-261966文中内容。innerText和outerText两者在获取值时返回结果一致,但是在设置值时,innerText不会修改元素本身属性,而outerText则会修改元素本身属性。

二、元素的text、innerText 和 textContent 的区别

以下内容参考链接 https://juejin.im/post/5c0914c5f265da610e7fe372整理和修改

我们再看一段代码

1234

为了节约篇幅,我这里就不展示Python代码。此处Python代码和上文一致,仅将元素设置为"table_1"。

运行结果:

谷歌浏览器: 83.0.4103.116selenium版本号:3.141.0-------text---------1 24-------innerText---------1     24-------outerText---------1     24-------textContent---------1234-------innerHTML---------1234-------outerHTML----------
1234
  1. text、innerText和outerText 不能取到没有渲染在页面上的文本,也就是说隐藏的文本无法获取,textContent能获取所有的文本。
  2. 对于元素下面的子元素的文本获取(例如本文中table下面的span元素) ,text、innerText和textContent获取文本的格式不一样,个人感觉innerText最贴合浏览器显示。
  3. innerText 会带来性能影响,由于 innerText 的值依赖渲染之后的结果,会受到 CSS 样式的影响,因此它会触发重排(reflow),所以使用它会有一定的性能影响;而 textContent 不会,因此更建议使用 textContent。
  4. textContent 是 W3C 兼容的文字内容属性,但是 IE 不支持。innerText 不是 W3C DOM 的指定内容,FireFox不支持。谷歌浏览两者都支持。

为了验证第3点,我修改了部分Python代码,做了一个小实验。

import datetime#统计获取text属性1000次耗时time = datetime.datetime.now()for _ in range(1000):    text = table.texttime = datetime.datetime.now() - timeprint("text循环1000次耗时:" + str(time))#统计获取innerText属性1000次耗时time = datetime.datetime.now()for _ in range(1000):    table.get_attribute("innerText")time = datetime.datetime.now() - timeprint("innerText循环1000次耗时:" + str(time))#统计获取outerText属性1000次耗时time = datetime.datetime.now()for _ in range(1000):    table.get_attribute("outerText")time = datetime.datetime.now() - timeprint("outerText循环1000次耗时:" + str(time))#统计获取textContent属性1000次耗时time = datetime.datetime.now()for _ in range(1000):    table.get_attribute("textContent")time = datetime.datetime.now() - timeprint("textContent循环1000次耗时:" + str(time))#统计获取innerHTML属性1000次耗时time = datetime.datetime.now()for _ in range(1000):    table.get_attribute("innerHTML")time = datetime.datetime.now() - timeprint("innerHTML循环1000次耗时:" + str(time))#统计获取outerHTML属性1000次耗时time = datetime.datetime.now()for _ in range(1000):    table.get_attribute("outerHTML")time = datetime.datetime.now() - timeprint("outerHTML循环1000次耗时:" + str(time))

测试多次后,每次运行情况大致相同,测试耗时结果如下:

谷歌浏览器: 83.0.4103.116selenium版本号:3.141.0text循环1000次耗时:0:00:08.362634innerText循环1000次耗时:0:00:03.509617outerText循环1000次耗时:0:00:03.101705textContent循环1000次耗时:0:00:03.016933innerHTML循环1000次耗时:0:00:03.166532outerHTML循环1000次耗时:0:00:03.373977

意外发现,调用text属性耗时最长。innerText、outerText、textContent、innerHTML、outerHTML耗时相差不大,所以我不敢保证第三点的正确性。可能是因为我本地selenium版本和谷歌浏览器版本与原作者之间存在差异所导致的,或者是因为我所测试的html过于简单,并没有太多渲染的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值