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

news2025/1/15 13:19:27

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 之间的差值就是滚动条的宽度:

// 创建一个包含滚动条的 div

let div = document.createElement('div');


div.style.overflowY = 'scroll';

div.style.width = '50px';

div.style.height = '50px';


// 必须将其放入文档(document)中,否则其大小将为 0

document.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 = True

            else:

                print(f"表格尚未滚动到底部, scroll_current:{scrollTop + client_height}")

                # 模拟按下 Page Down 键

                table.send_keys(Keys.PAGE_DOWN)

                time.sleep(2)  # 等待加载

       

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

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

相关文章

数字工厂管理系统和ERP管理系统有什么区别

在制造业的数字化转型浪潮中&#xff0c;数字工厂管理系统和ERP管理系统作为两大核心系统&#xff0c;扮演者不可或缺的角色。虽然它们都是为了提高企业的运营效率和降低成本&#xff0c;但在功能与实施效果方面&#xff0c;二者却有着显著的区别。本文将从这两个方面对数字工厂…

Pytorch实战01——CIAR10数据集

目录 1、model.py文件 &#xff08;预训练的模型&#xff09; 2、train.py文件&#xff08;会产生训练好的.th文件&#xff09; 3、predict.py文件&#xff08;预测文件&#xff09; 4、结果展示&#xff1a; 1、model.py文件 &#xff08;预训练的模型&#xff09; impor…

day57 动态规划part17● 647. 回文子串 ● 516.最长回文子序列● 动态规划总结篇

如果大家做了很多这种子序列相关的题目&#xff0c;在定义dp数组的时候 很自然就会想题目求什么&#xff0c;我们就如何定义dp数组。 布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0c;如果是dp[i][j…

C++学习路线

C学习路线思维导图&#xff0c;肝了一个星期终于搞定&#xff0c;这么硬核求个赞不过分吧&#xff1f; 思维导图的内容&#xff0c;也是本文的内容框架&#xff0c;坐稳扶好&#xff0c; C 高速快车要发车了&#xff01; 内容我会持续更新&#xff0c;点赞收藏&#xff0c;…

Window系统下Vscode配置C/Cpp运行+调试环境

Window系统下Vscode配置C/Cpp运行调试环境 文章目录 Window系统下Vscode配置C/Cpp运行调试环境1.安装Vscode2.安装C/Cpp插件3.配置gcc编译器4.配置Cpp运行环境5.配置Cpp调试环境 1.安装Vscode 安装VScode很简单&#xff0c;直接到官网进行下载&#xff0c;然后傻瓜安装即可。 …

读CDO代码

前置任务 module PIL.Image has no attribute ANTIALIASImage.ANTIALIAS 替换为 Image.LANCZOS&#xff0c;参考https://blog.csdn.net/fovever_/article/details/134690657 OSError: science is not a valid package style, path of style file, URL of这是对应可视化里面生…

GraphView实现测量工具

效果演示&#xff1a; 主模块代码&#xff1a; MeasureGraphView::MeasureGraphView(QWidget *parent): QWidget(parent) {ui.setupUi(this);m_measureType NoType;m_bll BllData::getInstance();m_scene new GraphicsScene;connect(m_bll, &BllData::pressMeasurePos…

力扣106 从中序与后续遍历序列构造二叉树

文章目录 题目描述解题思路代码 题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], …

【单片机毕业设计7-基于stm32c8t6的智能温室大棚系统】

【单片机毕业设计7-基于stm32c8t6的智能温室大棚系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇7基于stm32的智能衣柜系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 ---------------…

Sqllab第一关通关笔记

知识点&#xff1a; 明白数值注入和字符注入的区别 数值注入&#xff1a;通过数字运算判断&#xff0c;1/0 1/1 字符注入&#xff1a;通过引号进行判断&#xff0c;奇数个和偶数个单引号进行识别 联合查询&#xff1a;union 或者 union all 需要满足字段数一致&…

基础小白快速入门opencv-------C++ 在opencv的应用以及opencv的下载配置

啥是opencv&#xff1f; OpenCV&#xff08;开源计算机视觉库 Open Source Computer Vision Library&#xff09;是一个跨平台的计算机视觉库&#xff0c;最初由Intel开发&#xff0c;现在由一个跨国团队维护。它免费提供给学术和商业用途&#xff0c;并且是用C语言写成的&…

doit,一个非常实用的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个非常实用的 Python 库 - doit。 Github地址&#xff1a;https://github.com/pydoit/doit 在软件开发和数据处理过程中&#xff0c;经常会遇到需要执行一系列任务的情况&#xff0c;这些任务可…

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

做伦敦银要等怎样的价格与行情?

对于不同的伦敦银投资者来说&#xff0c;合适的入市价格和好的行情机会&#xff0c;标准可能并不一样&#xff0c;因为不同人有不同的交易策略、风险偏好和盈利目标。对于喜欢做趋势跟踪的投资者来说&#xff0c;一波明显而持续的上涨或下跌趋势&#xff0c;可能就是最好的行情…

yolov5-v6.0详细解读

yolov5-v6.0详细解读 一、yolov5版本介绍二、网络结构2.1 Backbone特征提取部分2.1.1 ConvBNSiLU模块2.1.2 C3模块2.1.2.1 BottleNeck模块 2.1.3 SPPF模块 2.2 Neck特征融合部分2.2.1 FPN2.2.2 PANet 2.3Head模块 三、目标框回归3.1 yolo标注格式3.2 yolov4目标回归框3.3 yolov…

数据结构-链表(二)

1.两两交换列表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2…

框架漏洞Shiroweblogicfastjson || 免杀思路

继续来讲一下我们的框架漏洞,先讲一下Shiro 1.Shiro反序列化 1.原理 Shiro的漏洞形成呢&#xff0c;就是因为存在了RememberMe这样的一个字段 Shiro 框架在处理 "rememberMe" 功能时使用了不安全的反序列化方法&#xff0c;攻击者可以构造恶意序列化数据&#xff0…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的危险物品检测系统(深度学习模型+PySide6界面+训练数据集+Python代码)

摘要&#xff1a;本文深入介绍了一个采用深度学习技术的危险物品识别系统&#xff0c;该系统融合了最新的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5等早期版本的性能。该系统在处理图像、视频、实时视频流及批量文件时&#xff0c;能够准确识别和分类各种危险物品…

9、组合模式(结构性模式)

组合模式又叫部分整体模式&#xff0c;它创建了对象组的树形结构&#xff0c;将对象组合成树状结构&#xff0c;以一致的方式处理叶子对象以及组合对象&#xff0c;不以层次高低定义类&#xff0c;都是结点类 一、传统组合模式 举例&#xff0c;大学、学院、系&#xff0c;它们…

勾八头歌之数据科学导论—数据预处理

第1关&#xff1a;引言-根深之树不怯风折&#xff0c;泉深之水不会涸竭 第2关&#xff1a;数据清理-查漏补缺 import numpy as np import pandas as pd import matplotlib.pyplot as pltdef student():# Load the CSV file and replace #NAME? with NaNtrain pd.read_csv(Tas…