16、技巧之九: 修改参数,如何让表格翻页滚动到底部?【Selenium+Python3网页自动化总结】

1、问题提出

在网页配置参数时,输入参数名称搜索,搜出来的同名参数结果有多个,分布在一个表格的不同行,表格是动态加载的,需要滚动鼠标才能把所出参数找出来。用selenium怎么实现这种参数修改?

2、网页元素的位置属性介绍

元素具有以下几何属性:

  • offsetParent —— 是最接近的 CSS 定位的祖先,或者是 td,th,table,body。
  • offsetLeft/offsetTop —— 是相对于 offsetParent 的左上角边缘的坐标。
  • offsetWidth/offsetHeight —— 元素的“外部” width/height,边框(border)尺寸计算在内。
  • clientLeft/clientTop —— 从元素左上角外角到左上角内角的距离。对于从左到右显示内容的操作系统来说,它们始终是左侧/顶部 border 的宽度。而对于从右到左显示内容的操作系统来说,垂直滚动条在左边,所以 clientLeft 也包括滚动条的宽度。
  • clientWidth/clientHeight —— 内容的 width/height,包括 padding,但不包括滚动条(scrollbar)。
  • scrollWidth/scrollHeight —— 内容的 width/height,就像 clientWidth/clientHeight 一样,但还包括元素的滚动出的不可见的部分。
  • scrollLeft/scrollTop —— 从元素的左上角开始,滚动出元素的上半部分的 width/height。
  • 除了 scrollLeft/scrollTop 外,所有属性都是只读的。如果我们修改 scrollLeft/scrollTop,浏览器会滚动对应的元素。

  • 底部判断公式:

scrollBottom = scrollHeight - scrollTop - clientHeight;

如果没有滚动,或元素底部已经完全滚动完成,那么它应该返回 0

换句话说:(完全高度)减去(已滚出顶部的高度)减去(可见部分的高度)—— 得到的结果就是滚动出来的底部的部分。

  • 滚动条的宽度计算:

为了获得滚动条的宽度,我们可以创建一个带有滚动条的元素,但是没有边框(border)和内边距(padding)。

然后,它的全宽度 offsetWidth 和内部内容宽度 clientWidth 之间的差值就是滚动条的宽度:

// 创建一个包含滚动条的 divlet div = document.createElement('div');div.style.overflowY = 'scroll';div.style.width = '50px';div.style.height = '50px';// 必须将其放入文档(document)中,否则其大小将为 0document.body.append(div);let scrollWidth = div.offsetWidth - div.clientWidth;div.remove();alert(scrollWidth);


 

3、实现代码:

        # 定位到包含表格的元素table = driver.find_element(By.XPATH, Table_Path)  # 替换为实际的表格xpath# 定义标志是否已经滚动到表格底部scroll_end = False# 模拟鼠标滚动并执行查找操作while not scroll_end:# 查找包含指定文本的单元格cells = driver.find_elements(By.XPATH,f"//td[.//span[contains(text(), '{filter_param}')]]")print(f"cells len:{len(cells)}")for cell in cells:# 找到当前单元格元素所在行中的前一个单元格元素left_cell = cell.find_element_by_xpath(f"./preceding-sibling::td[1]")# 设置显式等待时间为10秒wait = WebDriverWait(left_cell, 10)# 读取左边第一个格子的内容item = wait.until(EC.visibility_of_element_located((By.XPATH, "./div[2]")))# 如果已经滚动到页面底部,退出循环# 获取表格滚动后的高度scroll_height = driver.execute_script("return arguments[0].scrollHeight", table)client_height = driver.execute_script("return arguments[0].clientHeight", table)scrollTop = driver.execute_script("return arguments[0].scrollTop", table)print(f"client_height:{client_height}, scrollTop:{scrollTop}, scroll_height:{scroll_height}")# 判断是否已经滚动到底部if scroll_height - client_height - scrollTop < 20:print("表格已经滚动到底部")scroll_end = Trueelse:print(f"表格尚未滚动到底部, scroll_current:{scrollTop + client_height}")# 模拟按下 Page Down 键table.send_keys(Keys.PAGE_DOWN)time.sleep(2)  # 等待加载

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 |内网穿透

其实内网穿透&#xff0c;也挺好玩的&#xff0c;如果在大学的时候&#xff0c;那个时候讲计算机网络的老师能横向延展&#xff0c;估计课也会更有趣不少&#xff0c;本来计算机网络这门课就是计算机课程中可玩性最搞的。 只能说&#xff0c;怪可惜的 回到正题&#xff0c;内网…

知名Web3投资基金a16z合伙人Jane Lippencott确认出席Hack.Summit() 2024区块链开发者大会

在区块链技术的风起云涌和Web3生态的蓬勃发展中&#xff0c;知名a16z Crypto的合伙人Jane Lippencott已确认出席即将于2024年4月9日至10日在香港数码港举行的Hack.Summit() 2024区块链开发者大会。作为亚洲首次举办的Hack.Summit()&#xff0c;此次大会将为全球区块链开发者及业…

【JavaScript知识点】预解析、作用域、数据类型、数组常用方法、字符串常用方法

JS知识点 1.预解析2.作用域&#xff1a;一个变量可以生效的范围,这个变量的使用范围就是作用域3.作用域访问规则4.我们的存储空间分成两种栈和堆5.数据类型分为基本数据类型和复杂数据类型6.冒泡排序和选择排序7.数组常用方法8.字符串常用方法9.json 是一种轻量级的数据交换格式…

计算机网络——物理层(数据交换方式)

计算机网络——数据交换方式 提高数据交换方式的必要性电路交换电路交换原理电路交换的阶段建立阶段通信阶段和连接拆除阶段 电路交换的优缺点报文交换什么是报文报文交换的阶段报文交换的优缺点 分组交换分组交换的阶段分组交换的优缺点 数据交换方式的选择数据报方式数据报方…

使用vue3 开发H5 ,需要注意的部分点

以下内容为使用vue3 开发H5 中碰到的几个点&#xff0c;个人愚见。不定期进行补充。 框架端 1. 安装 vite插件 vitejs/plugin-legacy 。 npm add -D vitejs/plugin-legacy使用&#xff1a; 在vite.config.js 中引入 import legacy from vitejs/plugin-legacy; export defau…

相机拍照与摄影学基础

1.相机拍照 相机可能形状和大小不同&#xff0c;但基本功能相同&#xff0c;包括快门速度、光圈和感光度&#xff0c;这些是摄影的通用概念。即使是一次性相机也是基于这三个理念工作的。不同类型相机在这三个概念上的唯一区别是你可以控制这些功能的程度。这三个参数被称为相…

Redis在缓存方面的应用有哪些?如何避免缓存击穿、缓存雪崩等问题?Redis如何实现分布式锁?有哪些注意事项?

Redis在缓存方面的应用有哪些&#xff1f;如何避免缓存击穿、缓存雪崩等问题&#xff1f; Redis在缓存方面的应用广泛且多样&#xff0c;包括但不限于以下几个方面&#xff1a; 页面缓存&#xff1a;Redis可以将Web页面的内容片段&#xff0c;包括HTML、CSS和图片等静态数据&a…

【ESP32接入国产大模型之MiniMax】

1. MiniMax 讲解视频&#xff1a; ESP32接入语言大模型之MiniMax MM智能助理是一款由MiniMax自研的&#xff0c;没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司&#xff0c;一直致力于进行大模型相关的研究。 随着人工智能技术的不断发展&#xff0c;自然语…

基于opencv的图像处理系统的设计与实现

概要 随着计算机技术的飞速发展&#xff0c;图像技术在各领域的研究和应用日渐深入和广泛。opencv是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像处理。本文旨在对opencv进行一个快速全面简介,通过介绍图像处理的相关函数&#xff0c;使读…

安卓UI面试题 56-60

56. 简述IntentService原理分析 ? HandlerThread其实就是为了我们在 子线程中减少自己创建Looper以及运转Looper而出现的, 那么这次的IntentService其实封装的更巧妙,使用 HandlerThread的时候我们还需要创建Handler对象出来, 但是使用IntentService连Handler对象也不用我们…

前端小白的学习之路(HTML5 二)

提示&#xff1a;<svg>与<canvas> 目录 目录 一、svg标签 1.简介 2.常用属性 3.标签 4.使用示例 二、canvas标签 1.简介 2.常用属性与方法 3.使用示例 1)绘制基础图案 2)绘制组合图案(一个爱心) 3)做一幅动图 三、svg与canvas的区别 一、svg标签 1.简…

Kubernetes kafka系列 | k8s部署kafka+zookeepe集群(可外部通信)

直通车 zookeeper搭建 请参考yaml kafka.yaml --- apiVersion: v1 kind: Service metadata:name: kafka-hslabels:app: kafka spec:ports:- port: 9092targetPort: 9092name: serverclusterIP: Noneselector:app: kafka --- apiVersion: v1 kind: Service metadata:name: ka…

(一)、机器人时间同步方案分析

1、是否有必要进行时间同步 目前的自动驾驶系统包括 感知、定位、决策规划、控制 等模块&#xff0c;这些模块的正常运行需要依靠各种不同类型的传感器数据的准确 融合。尤其是激光雷达与相机这两种传感器在感、知定位模块中起着至关重要的作用。机械式旋转扫描激光雷达本身较低…

web canvas系列——快速入门上手绘制二维空间点、线、面

文章目录 ⭐前言⭐基本用法&#x1f496;设置一个 canvas 2D 上下文&#x1f496;绘制矩形常用方法属性&#x1f496;绘制一个红蓝交替的矩形 &#x1f496;绘制路径常用方法属性&#x1f496;画一个点&#x1f496;画一条线&#x1f496;画一个三角形面&#x1f496;画一个笑脸…

Map集合遍历键找值方式

1.4 Map集合遍历键找值方式 键找值方式&#xff1a;即通过元素中的键&#xff0c;获取键所对应的值 分析步骤&#xff1a; 获取Map中所有的键&#xff0c;由于键是唯一的&#xff0c;所以返回一个Set集合存储所有的键。方法提示:keyset()遍历键的Set集合&#xff0c;得到每一…

【leetcode热题】 两数之和 II - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers…

Rust 程序设计语言学习——所有权

这一节主要来学习 Rust 语言的其他特性&#xff0c;所有权、引用与借用、Slice 类型。 1 所有权 Rust 的核心功能&#xff08;之一&#xff09;是所有权&#xff08;ownership&#xff09;。虽然该功能很容易解释&#xff0c;但它对语言的其他部分有着深刻的影响。 所有程序…

Jenkins: 搭建Jenkins服务,调通Webhook链路

实现 jenkins docker 自动化发布 1 &#xff09;jenkins 下载 地址&#xff1a;https://www.jenkins.io/download/选择合适的版本&#xff0c;比如 mac 上 $ brew install jenkins-lts建议使用 docker 搭建&#xff0c;下面用 mac上整体流程演示 2 &#xff09;jenkins 管理…

代码分支管理

代码分支管理规范 一、分支管理要求 分支管理 • 将代码提交到适当的分支,遵循分支管理策略。 • 随时可以切换到线上稳定版本代码,确保可以快速回滚到稳定版本。 • 同时进行多个版本的开发工作,确保分支清晰,避免混淆。提交记录的可读性 • 提交描述准确,具有可检索性,…

Explain 关键字

优质博文&#xff1a;IT-BLOG-CN explain关键字可以模拟优化器执行 SQL 查询语句&#xff0c;从而知道 MySQL 是如何处理 SQL 语句的。分析查询语句或表结构的性能瓶颈。执行语句&#xff1a;explain SQL语句。表头信息如下&#xff1a; 一、ID 参数 select 查询的序列号&…