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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

Houdini的PythonScript基本使用

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

word避免画质画质模糊方法

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

基于JSP的九宫格日志网站

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

GPT-4o VS GPT-3.5 完胜

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

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

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

11.2 选择排序

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

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

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

[C][栈帧]详细讲解

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

BPTT算法详解:深入探究循环神经网络(RNN)中的梯度计算【原理理解】

引言 在深度学习领域中,我们经常处理的是独立同分布(i.i.d)的数据,比如图像分类、文本生成等任务,其中每个样本之间相互独立。然而,在现实生活中,许多数据具有时序结构,例如语言模型…

什么是PLAB?

接上文PLAB---》 可以看到和TLAB很像,PLAB即 Promotion Local Allocation Buffers。用在年轻代对象晋升到老年代时。 在多线程并行执行YGC时,可能有很多对象需要晋升到老年代,此时老年代的指针就"热"起来了,于是搞了个…

函数的创建和调用

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 提到函数,大家会想到数学函数吧,函数是数学最重要的一个模块,贯穿整个数学学习过程。在Python中,函数…

深入解析 YOLOv8 中的 `conv.py`(代码图文全解析-下)

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《yolov8》系列专栏&…

【linux软件基础知识】与调度相关的进程描述符

进程描述符 每个进程描述符都包括几个与调度相关的字段,如下代码所示: //include/asm-arm/thread_info.h /** low level task data that entry.S needs immediate access to.* __switch_to() assumes cpu_context follows immediately after cpu_domain.*/ struct thread_in…

6.1Java方法

1、方法定义: 方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用 方法的完整格式: 修饰符 返回类型 方法名(形参列表){ 方法体代码(需要执行的功能代码) return 返回值; } package com.define;public class …

面向对象编程 (OOP):深入理解继承、多态和抽象

1. 简介 面向对象编程 (OOP) 是一种强大的编程范式,它通过将程序组织成对象的集合来简化软件设计和开发。与传统的程序设计方法相比,OOP 提供了一种更自然、更易于理解和维护的方式来构建复杂的软件系统。OOP 的核心概念包括:对象、类、继承、…