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 time

driver = 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 time

driver = 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 time

driver = 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 time

driver = 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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git报错prohibited by Gerrit: not permitted: update

git push报错: Push to refs/for/[branch] to create a review, or get Push rights to update the branch. Contact an administrator to fix the permissions (prohibited by Gerrit: not permitted: update)原因: 使用Gerrit代码审核时,本…

IsoBench:多模态基础模型性能的基准测试与优化

随着多模态基础模型的快速发展,如何准确评估这些模型在不同输入模态下的性能成为了一个重要课题。本文提出了IsoBench,一个基准数据集,旨在通过提供多种同构(isomorphic)表示形式的问题,来测试和评估多模态…

React-表单受控绑定

概念:使用React组件的状态(useState)控制表单的状态 1.准备一个React状态值 2.通过value属性绑定状态,通过onChange属性绑定状态同步的函数

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录 一、在Eclipse中构建Maven项目 1.全局配置Maven 2.配置JDK路径 3.创建Maven项目 4.引入selenium-java依赖 二、Chrome自动化脚本编写 1.创建一个ChromeTest类 2.测试ChromeDriver 3.下载chromedriver驱动 4.在脚本中通过System.setProperty方法指定chromedriver的…

《软件方法(下)》8.3.4.5和《设计模式》中用语的区别

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.4 识别关联关系 8.3.4.4 类关系再整理 有了前面的知识,我们需要再整理一下类的关系。用类图表示类的关系如图8-134。 图8-134 “类的…

NextJs 数据篇 - 数据获取 | 缓存 | Server Actions

NextJs 数据篇 - 数据获取 | 缓存 | Server Actions 前言一. 数据获取 fetch1.1 缓存 caching① 服务端组件使用fetch② 路由处理器 GET 请求使用fetch 1.2 重新验证 revalidating① 基于时间的重新验证② 按需重新验证revalidatePathrevalidateTag 1.3 缓存的退出方式 二. Ser…

录制gif 强推LICEcap

LICEcap 官网:https://www.cockos.com/licecap/ 即按即用,录制好的gif可直接插入博客,yyds~

算法练习第25天|491. 非递减子序列

491. 非递减子序列 491. 非递减子序列https://leetcode.cn/problems/non-decreasing-subsequences/ 题目描述: 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案…

文件IO(三)

文件IO(三) 左移右移Linux的man 手册文件IO打开文件操作文件关闭文件 caps lock开灯关灯读取按键文件IO操作目录文件打开目录文件操作目录文件 库动态库和静态库的优缺点创建静态库创建动态库 按下右ctrl键 亮灭灯 左移右移 Linux的man 手册 文件IO 打开…

知网AI查重:AI工具如何助力通过检测?

论文降重一直是困扰各界毕业生的“拦路虎”,还不容易熬过修改的苦,又要迎来降重的痛。 其实想要给论文降重达标,我有一些独家秘诀。话不多说直接上干货! 1、同义词改写(针对整段整句重复) 这是最靠谱也是…

旅游门票预订系统小程序源码购票源码

功能介绍: 景点项目 支持发布多个景点项目、景点门票等。 在线支付 支持整合微信支付功能 一款基于ThinkPHP Uniapp开发的旅游i ]票预订系 统 支持景点]票、导游产品便捷预订、美食打卡、景点分 享、旅游笔记分享等综合系统,提供前后台无加密源码,支…

JS脚本打包成一个 Chrome 扩展(CRX 插件)

受这篇博客 如何把CSDN的文章导出为PDF_csdn文章怎么导出-CSDN博客 启发,将 JavaScript 代码打包成一个 Chrome 扩展(CRX 插件)。 步骤: 1.创建必要的文件结构和文件: manifest.jsonbackground.jscontent.js 2.编写…

汇编:调用Win32 API

在32位汇编程序中使用 Win32 API 是很常见的,特别是在开发 Windows 应用程序时调用的频率很高,Win32 API 提供了访问 Windows 操作系统功能的接口,包括窗口、消息处理、文件操作、网络通信等等。以下是使用 Win32 API 的一般步骤:…

Controller类明明写了@CrossOrigin跨域注解,但还是有跨域问题

可能是写的过滤器干扰到了跨域处理。如: 此时,先注释掉过滤器注解,让其不生效,就可以避免干扰跨域处理了 不过,这只能暂时解决该问题,毕竟过滤器还是要用的,后续我再探索一下。。。。。。。

springboot实现文件上传功能,整合云服务

文章目录 这是springboot案例的,文件上传功能的拆分,本篇将带大家彻底了解文件上传功能,先从本地存储再到云存储,全网最详细版本,保证可以学会,可以了解文件上传功能的开发文件上传功能剖析进行书写一个小的文件上传文件上传的文件三要素首先表单提交的方式要是 post方式,第二个…

艾体宝洞察 | Redis Enterprise对比ElastiCache

选择缓存数据库时,如何在Amazon ElastiCache和Redis Enterprise之间做出选择,应当考虑哪些标准? ElastiCache 通常可以满足基本的缓存需求,因此是一种适合初始阶段的解决方案。但随着使用量的增加,ElastiCache很快会变…

FreeSWITCH 1.10.10 简单图形化界面21-录音相关

FreeSWITCH 1.10.10 简单图形化界面21-录音相关 FreeSWITCH GUI界面预览00、安装FreeSWITCH GUI先看使用手册1、录音相关的应用11、record用法:举例:注意: 12、record_session用法:举例: 2、录音相关的变量3、单腿录音…

ICPC训练赛补题集

ICPC训练赛补题集 文章目录 ICPC训练赛补题集D - Fast and Fat (负重越野)I-路径规划G. Inscryption(邪恶铭刻)NEW Houses雪中楼(西安交通大学)L.BracketGenerationE - Checksum D - Fast and Fat (负重越野) 原题链接:原题链接 题意:体重大的背体重小的…

图像处理ASIC设计方法 笔记26 非均匀性校正SOC如何设计

在红外成像技术领域,非均匀性校正是一个至关重要的环节,它直接影响到成像系统的性能和目标检测识别的准确性。非均匀性是指红外焦平面阵列(IRFPA)中各个像元对同一辐射强度的响应不一致的现象,这种不一致性可能是由于制造过程中的缺陷、材料的不均匀性或者像元间的热电特性…

Mysql 8.0.37 安装教程

图片有点长,慢慢来 安装教程 安装地址:MySQL :: MySQL Downloads 进入官网 下载社区版 此处有两个版本,我们下载的是8.0.37版本 第一个需要联网安装,我们现在第二个离线安装 server only:仅安装MySQL server clien…