首页 > 其他分享 >关于shadow-root影子控件的selenium ui自动化

关于shadow-root影子控件的selenium ui自动化

时间:2024-08-28 10:36:54浏览次数:5  
标签:控件 driver 元素 selenium ele ui shadow root

首先这个控件和iframe有异曲同工之妙,也是嵌套的一个html,所以定位不能像普通定位一样

下面实践一下

首先准备一个root.html

<!DOCTYPE html>
<html>
<head>
  <title>带有shadow-root的页面</title>
</head>
<body>
  <h1 class="test">带有shadow-root的页面</h1>

  <template id="shadowRootTemplate">
    <style>
      /* 在shadow root中定义样式 */
      .message {
        color: blue;
        font-size: 18px;
      }
    </style>
    <div class="message">
      这是一个带有shadow-root的页面。
    </div>
  </template>

  <script>
    // 获取template元素
    const template = document.querySelector('#shadowRootTemplate');

    // 在<body>中创建shadow root
    const shadowRoot = document.body.attachShadow({ mode: 'open' });

    // 将template内容复制到shadow root中
    const templateContent = template.content.cloneNode(true);
    shadowRoot.appendChild(templateContent);
  </script>
</body>
</html>

这里偷个懒,使用python http服务启动一个临时的页面

python -m http.server

成功之后访问 http://localhost:8000/root.html

这样我们就具备了一个临时测试用的页面了

正题

首先 selenium 给元素对象提供了一个shadow_root的方法

我们先来定位到shadow-root元素的父级节点

driver.find_element(By.TAG_NAME, 'body')

然后根据父级节点的元素对象找到该元素下面的shadow-root

root_ele = driver.find_element(By.TAG_NAME, 'body')

ele = root_ele.shadow_root

此时,我们就可以使用ele元素对象去定位ele元素对象下的元素

例如:

ele.find_element(By.CSS_SELECTOR, '.message').get_attribute('innerText')

这样就可以对元素进行操作了

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Edge()
driver.get('http://localhost:8000/root.html')
driver.implicitly_wait(10)
# 定位shadow-root的父元素
root_ele = driver.find_element(By.TAG_NAME, 'body')
# 获取shadow-root对象
ele = root_ele.shadow_root
# 使用css 定位 shadow-root 下的元素
print(ele.find_element(By.CSS_SELECTOR, '.message').get_attribute('innerText'))

转自:https://ceshiren.com/t/topic/26345

标签:控件,driver,元素,selenium,ele,ui,shadow,root
From: https://www.cnblogs.com/leafautumn/p/18384125

相关文章

  • pygame封装连个常用控件
    #coding=utf-8importos,sys,re,timeimportpygameimportrandomfromwin32apiimportGetSystemMetricsfromtkinterimportmessageboxpygame.init()pygame.display.set_caption("我的控件")percent=0.6screen_width=GetSystemMetrics(0)screen_heig......
  • 【C#】【Winform】自定义控件、自定义事件
    https://blog.csdn.net/m0_62366581/article/details/139553373在开发桌面的过程中,有时候自带的控件样式或者功能上可能不一定能够满足我们的所有要求。这时候,我们需要自定义控件。创建类库项目把图标拖放到资源文件中添加用户控件设置样式尺寸修改代码视图其他项目中复用......
  • BuildContext 是什么
    在 Flutter 中 BuildContext 可太常见了,不管是 StatelessWidget 还是 StatefulWidget 的 build() 函数参数都会带有 BuildContext,好像随处可见,就像我们的一位老朋友,但似乎又对其知之甚少(熟悉的陌生人),今天我们再来了解一下这位老朋友 BuildContext,看看它在 Flutter ......
  • 最强图像反推Joy_Caption结合ComfyUI Flux GGUF的使用
    前言前言对于图像的提示词反推,大家不都陌生,最开始使用的WD14反推,到我之前写的文章[Flux超强图像提示词伴侣MiniCPM-V2.6(超强)|ComfyUI中Flux实现无IPA三图创意融合]反推的效果都在增强,今天再给大家推荐一款,号称最强提示词反推工具:JoyCaption,在ComfyUI中的安装,以及结合......
  • 折腾 Quickwit,Rust 编写的分布式搜索引擎 - 从不同的来源摄取数据
    摄取API在这节教程中,我们将介绍如何使用IngestAPI向Quickwit发送数据。要跟随这节教程,您需要有一个本地的Quickwit实例正在运行。https://quickwit.io/docs/get-started/installation要启动它,请在终端中运行./quickwitrun。创建索引首先,我们创建一个无模式的索......
  • P4655 [CEOI2017] Building Bridges
    题意思路设\(sum_i=\sum\limits_{j=1}^iw_j\)。可以得到转移方程\(f_i=f_j+(h_i-h_j)^2+sum_i-sum_j\)。转化为\(y=kx+b\)的形式:\(f_i=f_j+(h_i-h_j)^2+sum_i-sum_j=f_j+h_i^2+h_j^2-2h_ih_j+sum_i-sum_j=(-2h_ih_j)+......
  • [ARC062E] Building Cubes with AtCoDeer
    题意给定\(n\)个正方形,每个正方形的四个角有颜色,有方向。你需要选出\(6\)个正方形,拼出一个正方体,使得角上的颜色相同。问有多少种方案。\(n\le400,m\le1000\)Sol注意到若确定了对着的两个面,就可以确定正方体上所有面的颜色。因此考虑枚举两个面,计算出\(8\)个角......
  • 使用 Python 和 Selenium 解决 Cloudflare 验证码
     在网络自动化测试或网页数据抓取的过程中,Cloudflare验证码是许多开发者遇到的棘手问题。这一验证码设计的初衷是为了保护网站免受恶意攻击,但它也给合法的自动化操作带来了不小的挑战。那么,使用Python和Selenium,是否有办法有效应对并解决Cloudflare验证码的问题?有哪些技巧和方......
  • GUI编程02:Panel面板讲解
    本节内容视频链接:4、Panel面板讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p=4&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5在窗口(frame)中添加面板(panel), 并解决了窗口关闭事件。packagecom.yundait.www;importjava.awt.*;importjava.awt.e......
  • ComfyUI-插件IPAdapter图片融合(附插件)
    哈喽大家好,前两期介绍了IPAdapter的风格迁移和人物形象迁移,这期来分享下如何利用IPAdapter实现两张图的融合参考图1参考图2融合图图片融合1、工作流将基础工作流中的【IPAdapterUnifiedLoader】节点换成【IPAdapterUnifiedLoaderCommunity】【IPAdapter】节......