添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

读取shadow-root(closed)里面的内容

在一次查看网页的内容时,发现有的内容没有办法解析出来,而我要的元素就隐藏在shadow-root(closed)中。而我知道只有shadow-root(open)中的元素才是可以访问的。于是开始在网上查找相关内容。

而在官网中,作者介绍的一句话让我印象深刻:如果一个关闭的影子根和打开的影子根一样可以访问并获取的话,那为什么还需要一个关闭的影子根呢?

同时在官网中还存在唯一的解决方式,就是通过重载shadow-root(closed)成shadow-root(open)。

尝试在网页中将元素通过这种方式重新加载,但是似乎并没有起任何作用,同时也在一些有影子根的网站中测试过了,然而依旧没有起作用。网上一番求药,基本都是用js语句获取打开的shadow-root(open)的教程,最后终于在stark-overflow上找到了唯一的解决方案(坑很多,Google上基本有shadow-root(closed)的博客都看过了)。同样也是将shadow-root(closed)转成shadow-root(open)状态。至于怎么从open状态下取数据,可以自行百度,相关解决方案有很多。

思路就是将closed改成open状态,然后再从中通过js访问数据。但是既然在浏览器的控制台中没有办法让它实现,那我们就在程序加载之前将影子根打开。

这里我贴上三个文件的代码。写完后只需要在Google浏览器的开发者模式中加载解压好的拓展程序(带有这三个文件的文件夹)就可以了。就像平时自己下载的插件一样。
injected.js

Element.prototype._attachShadow = Element.prototype.attachShadow;
Element.prototype.attachShadow = function () {
    console.log('attachShadow');
    return this._attachShadow( { mode: "open" } );

manifest.json

{
“name”: “SeleniumTesting”,
“description”: “将网页上的shadow-root(closed)重载成shadow-root(open)”,
“version”: “1.0”,
“author”: “Author”,
“manifest_version”: 2,
“permissions”: ["<all_urls>", “https://www.baidu.com/"],
“content_scripts”: [{
“matches”: ["https://你需要让它生效的网站.com/
”],
“run_at”: “document_start”,
“all_frames”: true,
“js”: [“shadowInject.js”]
}],
“web_accessible_resources”: [“injected.js”]
}

shadowInject.js

const injectedScript = document.createElement('script');
injectedScript.src = chrome.extension.getURL('injected.js');
(document.head || document.documentElement).appendChild(injectedScript);

全程只需要在第二个网站中修改你需要让它生效的网站域名即可。

如果说看不懂这三个文件,有兴趣的话可以百度看一下这三个文件的书写规则,以及每个文件内参数代表的内容。

最后看一下修改前和修改后的对比图:
before
在这里插入图片描述
after
在这里插入图片描述
插件:
在这里插入图片描述

@TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增
shadow-root中的元素定位方法背景观察一下元素的DOM结构我理解的shadow-root定位步骤实现元素定位的语句还有一种更简单的方法 最近接手了一个新项目的测试工作,前几天领导让做自动化,本来以为平平无奇的自动化,结果开始写的时候就给我难住了,明明白白的看见元素就在页面上,用了css、xpath等各种定位方法,却怎么都定位不到,搞得我差点怀疑自己之前学的定位方法都是假的。 直到我师父给我点拨,说shadow-root里面的元素不能用普通的定位方法,才指引我走上正确的道路。 观察一下元素的DO
1、先定位到 shadow-root 的宿主节点(此处为 id=box 的 div) 2、切换到 shadow-root 中 3、然后再选择 shadow-root 下的 span 标签 import time from selenium import webdriver driver = webdriver.Chrome() driver.get(url="http:127.0.0.1:5000/test") js = 'document.getElementById("box").shadowR.
在使用Ionic的时候,难免会出现要修改原有样式的情况。但新版的Ionic采用了ShadowRoot来隔离样式,不能愉快的直接通过CSS修改ShadowRoot下的样式,但我们又想修改,怎么办呢? 可以看到该组件提供了三个CSS Shadow Part,然后我们使用快捷键F12或者ctrl + shift + i打开Web开发者工具,找到ion-back-button,并找到这三个Part。 public String getShadowElementValue(String locator) { JavascriptExecutor js = WebDriver.getDriver(); String script = "return document.evaluate(\"" + locator + "\", document, null, XPathResult.FIRST_
博途V16是一种工业自动化软件,它可以用于读取S7-300。S7-300是西门子公司推出的一款可编程控制器(PLC),它被广泛应用于工业控制领域。在博途V16中,使用Step 7编程软件来读取S7-300。以下是读取S7-300的步骤: 1. 连接S7-300到电脑上。首先需要将S7-300连接到电脑上,可以使用USB、串口等线缆连接。连接完成后,需要启动博途V16软件。 2. 在博途V16中打开Step 7编程软件。在软件界面中,选择“新建项目”并创建一个项目。 3. 选择设备类型。在新的项目中,需要选择连接的设备类型为S7-300,以便能够与该设备通信。 4. 配置通讯。在设备类型选择完成后,需要配置通讯参数。选择“通讯设置”选项并按照提示进行设置,例如选择串口号、波特率等参数。 5. 读取数据。配置通讯参数之后,就可以通过编写程序来读取S7-300的数据。在Step 7编程软件中,可以使用各种PLC功能块和指令来对设备进行控制,例如读取输入信号、控制输出信号等等。 总的来说,博途V16可以很方便地读取S7-300,并且使用Step 7编程软件可以进行各种控制操作。这使得工业控制领域的自动化化应用更加便捷和高效。
os.py“, line 725, in __getitem__ raise KeyError(key) from None KeyError: ‘PATH‘ big__apple: 你需要指定路径的也许 python相对路径和绝对路径导致[WinError 3] 系统找不到指定的路径 我的是Pycharm中可以正常使用,但是在VScode中就不能使用了 读取shadow-root(closed)里面的内容 big__apple: 主页看邮箱哈,会比较及时 读取shadow-root(closed)里面的内容 姬10B: 大佬怎么咨询 {“errcode“:44001,“errmsg“:“empty media data, hint: [1655962096234893527769663], from ip: 222.72.xxx. requests在电脑开启代理的情况下无法正常发送请求 This application failed to start because it could not find or load the Qt platform plugin