【Python】Selenium根据网页页面长度,模拟向下滚动鼠标,直到网页底部的操作

最近在弄selenium的爬取的过程中,我发现一些网站上的表格,是需要手动拉到底部才能加载完成的。

如果没有拉到底部,那么在获取网页表格的时候,表格就会只有显示的一部分,页面就不完整。

所以我就整理了一些模拟滚动鼠标,加载到页面底部的方法。用于处理这个问题~

以下是几种常见的方法,个人是用的最多的是第一种,如果不好用的话,可以用后面几种。

1. 使用Selenium库

Selenium是一个强大的自动化测试工具,可以用来模拟浏览器操作,包括滚动页面。以下是一个使用Selenium模拟滚动页面的示例:

from selenium import webdriver
import time# 创建一个Chrome浏览器实例
driver = webdriver.Chrome()# 打开目标网页
driver.get('https://example.com')# 获取页面的总高度
last_height = driver.execute_script("return document.body.scrollHeight")while True:# 滚动到页面底部driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 等待新内容加载time.sleep(2)# 获取新的页面高度new_height = driver.execute_script("return document.body.scrollHeight")# 如果页面高度没有变化,说明已经到底部if new_height == last_height:breaklast_height = new_height# 关闭浏览器
driver.quit()

在这个示例中,我们首先创建了一个Chrome浏览器实例,然后打开目标网页。接着,我们使用一个while循环来滚动页面到底部,并每次滚动后等待新内容加载。如果新的页面高度与之前的相同,就结束循环,表示已经到达页面底部。最后,我们关闭了浏览器。

2. 使用PyAutoGUI库

PyAutoGUI是一个跨平台的GUI自动化库,可以用来模拟鼠标和键盘操作。以下是一个使用PyAutoGUI模拟鼠标滚动的示例:

import pyautogui
import time# 获取屏幕尺寸
screen_width, screen_height = pyautogui.size()# 移动鼠标到屏幕中央
pyautogui.moveTo(screen_width / 2, screen_height / 2)# 模拟鼠标滚轮滚动
for i in range(10):  # 滚动10次pyautogui.scroll(-100)  # 向下滚动100单位time.sleep(1)  # 每次滚动后暂停1秒

这个的逻辑是,先获取屏幕尺寸,然后将鼠标移动到屏幕中央。接着,我们使用一个for循环来模拟鼠标滚轮滚动,每次向下滚动100单位,并在每次滚动后暂停1秒。

3. 使用Pynput库

Pynput是一个用于控制和监视输入设备(如鼠标和键盘)的Python库。以下是一个使用Pynput模拟鼠标滚动的示例:

from pynput.mouse import Controller
import time# 创建鼠标控制器
mouse = Controller()# 移动鼠标到屏幕中央
mouse.position = (screen_width / 2, screen_height / 2)# 模拟鼠标滚轮滚动
for i in range(10):  # 滚动10次mouse.scroll(0, -2)  # 向下滚动2单位time.sleep(1)  # 每次滚动后暂停1秒

在上面的代码中,我们首先创建了一个鼠标控制器,然后将鼠标移动到屏幕中央。

接着,我们使用一个for循环来模拟鼠标滚轮滚动,每次向下滚动2单位,并在每次滚动后暂停1秒。

4. 使用ActionChains类

Selenium的ActionChains类可以用来模拟复杂的用户操作,包括鼠标拖动和滚动。以下是一个使用ActionChains类模拟滚动页面的示例:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time# 创建一个Chrome浏览器实例
driver = webdriver.Chrome()# 打开目标网页
driver.get('https://example.com')# 创建ActionChains对象
action = ActionChains(driver)# 模拟鼠标滚动
for i in range(10):  # 滚动10次action.move_by_offset(0, 500).perform()  # 向下滚动500像素time.sleep(1)  # 每次滚动后暂停1秒# 关闭浏览器
driver.quit()

这段代码中,我们首先创建了一个Chrome浏览器实例,然后打开目标网页。

接着,我们创建了一个ActionChains对象,并使用一个for循环来模拟鼠标滚动,每次向下滚动500像素,并在每次滚动后暂停1秒。最后,我们关闭了浏览器。

后面两种方法是模拟了鼠标操作,比较不容易被监测为爬虫,点击也方便。

总结

以上是几种在Python中根据页面长度模拟滚动鼠标的操作方法。

如果需要其他类型的鼠标滚动方法,可以参考:
【Python】Selenium模拟滚动鼠标的各种示例(一口气滚动到网页底部、逐步滚动、滚动到某个元素可见,按照次数滚动)

在这里插入图片描述

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

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

相关文章

openharmony电源管理子系统

电源管理子系统 简介目录使用说明相关仓 简介 电源管理子系统提供如下功能: 重启服务:系统重启和下电。系统电源管理服务:系统电源状态管理和休眠运行锁管理。显示相关的能耗调节:包括根据环境光调节背光亮度,和根…

麒麟操作系统服务架构保姆级教程(十一)https配置

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 在运维工作中,加密和安全的作用是十分重要的,如果仅仅用http协议来对外展示我们的网站,过一段时间就会发现网站首页被人奇奇怪怪的篡改了,本来好好的博…

RabbitMQ---消息确认和持久化

(一)消息确认 1.概念 生产者发送消息后,到达消费端会有以下情况: 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除,那么就可能会导致,消息处理异常想要再获取这条消息的时…

Linux:System V - 共享内存

1.System V共享内存的原理 通过为用户提供系统调用接口,让用户可以申请一块空间,进程A/B也可以通过系统调用接口将创建好的内存通过页表映射进进程的地址空间。完成让不同的两个进程看见同一份资源的目的。如果未来不想继续通信,取消进程和内…

SpringBoot错误码国际化

先看测试效果: 1. 设置中文 2.设置英文 文件结构 1.中文和英文的错误消息配置 package com.ldj.mybatisflex.common;import lombok.Getter;/*** User: ldj* Date: 2025/1/12* Time: 17:50* Description: 异常消息枚举*/ Getter public enum ExceptionEnum {//…

道旅科技借助云消息队列 Kafka 版加速旅游大数据创新发展

作者:寒空、横槊、娜米、公仪 道旅科技:科技驱动,引领全球旅游分销服务 道旅科技 (https://www.didatravel.com/home) 成立于 2012 年,总部位于中国深圳,是一家以科技驱动的全球酒店资源批发商…

Solidity01 Solidity极简入门

一、Solidity 简介 Solidity 是一种用于编写以太坊虚拟机(EVM)智能合约的编程语言。我认为掌握 Solidity 是参与链上项目的必备技能:区块链项目大部分是开源的,如果你能读懂代码,就可以规避很多亏钱项目。 Solidity …

如何使用WPS的JS宏实现Word表格的自动编号

如何使用WPS的JS宏实现Word表格的自动编号&#xff1f;如下图&#xff0c;想要给表格的编号列中添加序号。 使用WPS的JS宏可以实现自动编号&#xff0c;代码如下&#xff1a; n Selection.Tables.Item(1).Rows.Count;for(i 2;i<n;i){Selection.Tables.Item(1).Cell(i,1).…

Python在多个Excel文件中找出缺失数据行数多的文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件内、某一列数据的特征&#xff0c;对其加以筛选&#xff0c;并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。 首先&#xff0c;我们来明确一下本…

【Linux】应用层自定义协议与序列化

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 应用层 &#x1f98b; 再谈 "协议"&#x1f98b; 网络版计算器&#x1f98b; 序列化 和 反序列化 二&#xff1a;&#x1f525; 重新理解 read、…

数字化贷款管理:助贷系统软件为贷款中介带来的五大改变

随着金融行业的数字化转型&#xff0c;贷款中介的业务模式也在不断创新。助贷系统作为数字化管理的核心工具&#xff0c;正在为贷款中介带来深刻的变革。本文将从五个方面探讨助贷系统软件如何改变贷款中介行业的管理模式&#xff0c;提升业务效率&#xff0c;降低运营成本。乐…

MIAOYUN信创云原生项目亮相西部“中试”生态对接活动

近日&#xff0c;以“构建‘中试’生态&#xff0c;赋能科技成果转化”为主题的“科创天府智汇蓉城”西部“中试”生态对接活动在成都高新区菁蓉汇隆重开幕。活动分为成果展览、“中试”生态主场以及成果路演洽谈对接三大板块。在成果展览环节&#xff0c;成都元来云志科技有限…

一文简要了解为什么需要RAG、核心原理与应用场景

欢迎来到AI应用探索&#xff0c;这里专注于探索AI应用。 一、为什么需要RAG&#xff0c;它解决了哪些问题 在自然语言处理领域&#xff0c;生成式预训练模型&#xff08;如GPT&#xff09;已经展示了强大的文本生成能力。然而&#xff0c;这些模型有以下局限性&#xff1a; 知…

gametime

gametime 一、查壳 无壳&#xff0c;32位 二、IDA分析 先看看main 妈呀&#xff0c;好多函数&#xff0c;脑子有点乱 先运行下EXE看看有什么突破口没 可以看出是游戏&#xff0c;明显是看你的输入对不对&#xff0c;来通关的&#xff0c;所以有关判定的条件或者函数是解题…

基于机器学习随机森林算法的个人职业预测研究

1.背景调研 随着信息技术的飞速发展&#xff0c;特别是大数据和云计算技术的广泛应用&#xff0c;各行各业都积累了大量的数据。这些数据中蕴含着丰富的信息和模式&#xff0c;为利用机器学习进行职业预测提供了可能。机器学习算法的不断进步&#xff0c;如深度学习、强化学习等…

【Linux】Socket编程-TCP构建自己的C++服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; Socket 编程 TCP &#x1f98b; TCP socket API 详解&#x1f98b; 多线程远程命令执行&#x1f98b; 网络版计算器&#xff08;应用层自定义协议与序列化…

C++(二十一)

前言&#xff1a; 本文承接上文&#xff0c;将详细讲解指针概念。 一&#xff0c;通过指针了解变量的数值。 在将变量地址存入指针后&#xff0c;从指针反推也可以知道原变量的值&#xff0c;若想进行反退&#xff0c;就需要使用间接引用运算符&#xff1a;*。 语法&#x…

Windows图形界面(GUI)-QT-C/C++ - Qt List Widget详解与应用

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 QListWidget概述 使用场景 常见样式 QListWidget属性设置 显示方式 (Display) 交互行为 (Interaction) 高级功能 (Advanced) QListWidget常见操作 内容处理 增加项目 删除项目…

一文了解如何使用 DBeaver 管理 DolphinDB

在日常的数据开发、分析和数据库运维中&#xff0c;一款优秀的 IDE 能够极大地提升工作效率。DBEaver 是一款由 Java 编写的一站式跨平台连接器&#xff0c;其社区版本已能支持连接近百种数据库&#xff0c;受到广大开发者的喜爱。近期。DolphinDB 与 DBeaver 团队共同努力&…

CSRF攻击XSS攻击

概述 ​在 HTML 中&#xff0c;<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址&#xff0c;而所谓的跨域请求就是指&#xff1a;当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指…