15-通过JS代码处理窗口滚动条

        selenium并不是万能的,页面上有些操作无法实现时,就需要借助JS代码来完成了。selenium提供了一个方法:execute_script(),可以执行JS脚本代码。

        比如:当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到的,会报元素不可见的错误。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。而滚动条是无法直接用定位工具来进行定位的,selenium也没有提供直接的方法去控制滚动条,这时候只能借助JS代码来完成。

一、JavaScript简介

        为什么要了解JavaScript?因为有些特殊的操作是selenium+python无法直接完成的,而JavaScript刚好是这方面的强项,所以算是一个很好的补充。

        JavaScript是一种运行在浏览器中的解释型编程语言:http://www.w3school.com.cn/js/index.asp4。

二、纵向滚动条

1)滚动条回到顶部
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)# 滚动条回到顶部
js = "window.scrollTo(0, 0)"
driver.execute_script(js)
2)滚动条拉到底部
from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)# 滚动条拉到底部
js = "window.scrollTo(0, document.body.scrollHeight)"
driver.execute_script(js)

--scrollHeight:获取对象的滚动高度。
--scrollWidth:获取对象的滚动宽度。

三、横向滚动条

        有时候浏览器页面需要左右滚动(一般屏幕最大化后,左右滚动的情况就很少见了)。通过scrollTo(x, y)方法可以控制横向和纵向滚动条,其中第一个参数x是横向距离,第二个参数y是纵向距离。

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)js = "window.scrollTo(100, 400);"
driver.execute_script(js)

四、元素聚焦

        用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?

        这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以进行操作了,同样需要借助JS代码来实现。

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get('https://xa.ganji.com/')
time.sleep(1)# 元素聚焦
target = driver.find_element('xpath', '//*[@id="app"]/div/div[2]/div[3]/div[1]')
driver.execute_script("arguments[0].scrollIntoView();", target)

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

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

相关文章

MyBatis查询功能

MyBatis的各种查询功能 1、若查询出的数据只有一条 (1)可以通过实体类对象或者集合接收 (2)可以通过List集合接收 (3)可以通过map集合接收 结果:{password123456, sex女, id8, age22, email1234qq.com, usernameadmin4} 2、若查询出来的数据有…

[leetcode hot 150]第一百零八题,将有序数组转换为二叉搜索树

题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。 给定一个有序的整数数组,我们需要构建一棵平衡的二叉搜索树。平衡二叉树是指任意一个节点的左右子树的高度差不超过1。 由于给定的数组是有序的…

阿里云计算学习笔记(一)

运维管理 运维管理(Operation and Maintenance Management, 简称O&M管理)是指通过科学的管理方法和技术手段,对IT系统和基础设施进行监控、维护、优化和保障,以确保系统的高可用性、稳定性、安全性和性能。运维管理涵盖了硬件…

Prime1 - 提权的另一种解法,彻底搞懂OpenSSL解密渗透提权,超强思路版。

提权枚举 现在我们直接从低权限用户开始;我们先按照提权步骤,简单的系统枚举 虽然我们知道可以利用系统版本低进行内核提权,内核提权虽然比较快比较方便,但也比较暴力,缺点非常明显;很容易导致系统服务中…

【云原生】Kubernetes----POD控制器

目录 引言 一、Pod控制器概述 二、Pod控制器的种类 (一)ReplicaSet (二)Deployment (三)StatefulSet (四)DaemonSet (五)Job 三、使用POD控制器 &a…

【Seafile】Seafile容器版文件删除后存储空间不释放问题解决

Seafile是一款非常优秀的网盘系统,我们可以根据官方文档,在本地虚拟机研究Seafile免费版的安装和使用,安装建议采用使用docker容器的方式。 不过在使用过程中,刚接触的小伙伴可能会遇到这样的问题: 删除网盘里面的文…

数据赋能(106)——方法论:描述模式与AI——批量处理

在一系列相似的主题内容进行编写时,可以采用批处理的方式。主要步骤如下: 1、确定主题内容模式。如:各个主题的概述中,包括如下内容模式项目:工作主要目的、工作重要性、工作核心内容、工作本质 2、确定模式的各项内…

C++设计模式-状态模式

文章目录 28. 状态模式 运行在VS2022,x86,Debug下。 28. 状态模式 状态模式让一个对象的行为随着内部状态的改变而改变,而该对象也像换了类一样。应用:如在游戏开发中,游戏有不同场景,如主菜单、开始、战斗…

在leafet上画圆、多边形、线、矩形

在leaflet上画圆、多边形、线、矩形 <template><div id"map" class"map"></div> </template><script> import L from leaflet; export default {data () {return {myGroup: ,};},mounted () {this.initMaps()this.huizhiro…

Houdini的PythonScript基本使用

前言 Houdini内置了Python脚本和相应的编辑器, 很多时候想灵活的制作各种Houdini工具, 基本是必须用到 Python。Houdini官方的python提供了非常完善的接口, 比如可以创建各种节点&#xff0c;连接各种节点&#xff0c;遍历节点各种数据&#xff0c;遍历节点参数等等。 Houdin…

Spring中Bean的生命周期详解

目录 Bean的定义和作用Bean的生命周期概述Bean实例化阶段依赖注入阶段初始化阶段Bean的使用销毁阶段完整的Bean生命周期流程示例代码总结 Bean的定义和作用 在Spring框架中&#xff0c;Bean是指由Spring IoC容器管理的Java对象。Bean是构建Spring应用程序的基本单元&#xf…

word避免画质画质模糊方法

问题描述&#xff1a;   近期写文档时会高频率贴图&#xff0c;粘图过程中发现Word会自动压缩图片画质&#xff0c;而且压缩得很严重&#xff0c;下面是一幅图被压缩前后的画质对比 &#xff08;图片压缩前&#xff09; &#xff08;图片压缩后&#xff09; 解决方案&#x…

基于JSP的九宫格日志网站

你好呀&#xff0c;我是学长猫哥&#xff01;如果有需求可以文末加我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器/服务器&#xff08;B/S&#xff09;结构 系统展示 首页 管理员功能模块 用户功能模块 摘要 本…

GPT-4o VS GPT-3.5 完胜

前言&#xff1a; 最近&#xff0c;GPT-4o已经限时免费开放了&#xff0c;试了一下&#xff0c;然后&#xff0c;说我的时间到了&#xff0c;然后&#xff0c;有给我转到3.5&#xff0c;正好遇到一个问题做一下对吧&#xff0c;感觉4O完胜啊。3.5还是很好胡诌&#xff0c;也就…

[Algorithm][动态规划][子序列问题][最长定差子序列][最长的斐波那契子序列的长度]详细讲解

目录 1.最长定差子序列1.题目链接2.算法原理详解3.代码实现 2.最长的斐波那契子序列的长度1.题目链接2.算法原理详解3.代码实现 1.最长定差子序列 1.题目链接 最长定差子序列 2.算法原理详解 思路&#xff1a; 确定状态表示 -> dp[i]的含义 以i位置元素为结尾的所有子序列…

Python知识点3---条件判断语句

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python的条件判断语句和其他的语言有些不一样&#xff0c;它只有if语…

【从加载数据库驱动包,理解java SPI】

SPI&#xff08;Service Provider Interface&#xff09; 从1.6引入&#xff0c;基于ClassLoader 来加载并发现服务的机制 对于msyql驱动 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><v…

11.2 选择排序

目录 11.2 选择排序 11.2.1 算法特性 11.2 选择排序 选择排序&#xff08;selection sort&#xff09;的工作原理非常简单&#xff1a;开启一个循环&#xff0c;每轮从未排序区间选择最小的元素&#xff0c;将其放到已排序区间的末尾。 设数组的长度为 &#x1d45b;…

华东师范大学研究团队《Ecology Letters 》揭示植物如何改变其物候以响应全球变化

自工业革命以来&#xff0c;人类活动导致多种环境因子同时发生变化&#xff0c;包括气候变暖、降水模式改变、氮沉降增加和大气CO2升高。这些变化预计会影响植物生命周期事件的季节时序—植物物候&#xff08;Nature Reviews Earth & Environment | 傅伯杰院士团队发文阐述…

[C][栈帧]详细讲解

目录 1.栈帧1.进程地址空间2.栈帧说明 2.认识相关寄存器3.认识相关汇编命令4.过程理解5.栈帧总结6.补充 1.栈帧 1.进程地址空间 .进程地址空间 2.栈帧说明 调用函数&#xff0c;形成栈帧函数返回&#xff0c;释放栈帧局部变量是存放在栈区上的栈区内存的使用习惯是&#xff…