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.hqwc.cn/news/536426.html

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

相关文章

【深度学习实践】HaGRID,YOLOv5,手势识别项目,目标检测实践项目

文章目录 数据集介绍下载数据集将数据集转换为yolo绘制几张图片看看数据样子思考类别是否转换下载yolov5修改数据集样式以符合yolov5创建 dataset.yaml训练参数开始训练训练分析推理模型转换onnx重训一个yolov5s后记 数据集介绍 https://github.com/hukenovs/hagrid HaGRID&a…

开源办公系统CRM管理系统

基于ThinkPHP6 Layui MySQL的企业办公系统。集成系统设置、人事管理、消息管理、审批管理、日常办公、客户管理、合同管理、项目管理、财务管理、电销接口集成、在线签章等模块。系统简约&#xff0c;易于功能扩展&#xff0c;方便二次开发。 服务器运行环境要求 PHP > 7.…

Kubernetes kafka系列 | k8s部署kafka+zookeepe集群(可外部通信)| kafka docekr镜像制作-v3.5.2

一、 Kafka、ZooKeeper 的分布式消息队列系统总体架构 典型的 Kafka 体系架构包括若干 Producer(消息生产者),若干 Broker(作为 Kafka 节点的服务器),若干 Consumer (Group),以及一个 ZooKeeper 集群。 Kafka 通过 ZooKeeper 管理集群配置、选举 Leader,并在 Consum…

单调队列 维护区间最值(板子+两道练手)

1.P1886 滑动窗口 /【模板】单调队列https://www.luogu.com.cn/problem/P1886 板子题&#xff0c;传送门在上方 // Problem: // P1886 滑动窗口 /【模板】单调队列 // // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P1886 // Memory Limit: 500 MB //…

订单超时自动取消订单实现策略

订单超时&#xff0c;自动取消&#xff0c;在生活中很常见。比如整点秒杀时&#xff0c;下单后&#xff0c;三十分钟没有付款。这个订单就会被自动取消。这个操作的实现策略有下面这几个&#xff1a; 方案一&#xff1a;使用JDK自带的延迟队列 JDK中提供了一种延迟队列数据结构…

【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论二】

前言&#xff1a; 本篇主要参考《Wasserstein GAN and the Kantorovich-Rubinstein Duality》 重点介绍一下 WGAN 的损失函数 是如何通过 Wasserstein Distance 变换过来的。 分为5步&#xff1a; 我们首先建立Wasserstein Distance 极小值形式&#xff0c; 经过对…

Rabbit MQ详解

写在前面,由于Rabbit MQ涉及的内容较多&#xff0c;赶在春招我个人先按照我认为重要的内容进行一定总结&#xff0c;也算是个学习笔记吧。主要参考官方文档、其他优秀文章、大模型问答。自己边学习边总结。后面有时间我会慢慢把所有内容补全&#xff0c;分享出来也是希望可以给…

【bug mysql】‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

【bug mysql】‘mysql’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 mysql常规错误&#xff0c;安装好了没有设置环境变量&#xff0c;报错了“mysql 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。” 解决办法&#xff1a; 添加M…

安装、配置MySQL

安装相关软件 MySQL Server、MySQL Workbench MySQL Server&#xff1a;专门用来提供数据存储和服务的软件 MySQL Workbench&#xff1a;可视化的 MySQL 管理工具 官网安装 https://www.mysql.com/ 官网 MySQL :: Download MySQL Installer 安装包路径 在这里选择版本和和对应…

【毕设级项目】基于嵌入式的智能家居控制板(完整工程资料源码)

基于嵌入式的智能家居控制板演示效果 基于嵌入式的智能家居控制板 前言&#xff1a; 随着科技的不断进步&#xff0c;物联网技术得到了突飞猛进的发展。智能家居是物联网技术的典型应用领域之一。智能家居系统将独立家用电器、安防设备连接成一个具有思想的整体&#xff0c;实现…

MyBatis3源码深度解析(十)MyBatis常用工具类(三)MetaObjectMetaClass

文章目录 3.4 MetaObject3.5 MetaClass 3.4 MetaObject MetaObject是MyBatis提供的反射工具类&#xff0c;可以方便地获取和设置对象的属性值。 该工具类在MyBatis源码中出现的概率非常高。 假设有两个实体类&#xff1a;用户信息User和订单信息Order&#xff0c;一个用户可…

速卖通批量注册买家号安全吗?怎么弄?

在速卖通等跨境电商平台上&#xff0c;买家号的注册与养号过程繁琐而复杂。传统的手动注册方式效率低下&#xff0c;难以满足大规模的需求。而跨境智星系统凭借其全自动化的功能&#xff0c;能够轻松实现买家号的批量注册与养号&#xff0c;大大提高了效率。 使用跨境智星系统进…