当前位置: 首页 > article >正文

【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:
        break
    
    last_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.kler.cn/a/507781.html

相关文章:

  • 32单片机综合应用案例——基于GPS的车辆追踪器(三)(内附详细代码讲解!!!)
  • Spring框架 了解
  • Java基础:equals()方法与==的区别
  • Django自带admin管理系统使用
  • 11-1.Android 项目结构 - androidTest 包与 test 包(单元测试与仪器化测试)
  • 网络技术发展的演变与未来展望
  • UI Automation 中所有Patterns
  • [WUSTCTF2020]Cr0ssfun
  • Nginx(搭建高可用集群)
  • 如何使用WPS的JS宏实现Word表格的自动编号
  • Open3D 计算每个点的协方差矩阵【2025最新版】
  • improve-gantt-elastic(vue2中甘特图实现与引入)
  • 软考信安25~移动应用安全需求分析与安全保护工程
  • blackbox_exporter 如何检测端口
  • 【Javaweb05】 XML探秘:解码数据的哲学,构建跨界的沟通桥梁
  • 终极布朗尼盘-论文学习总结(来自美赛2013A题)
  • uniapp -- Vue3 MQTT集成(H5、小程序)踩坑记录
  • 【MySQL】MySQL用户管理
  • RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集
  • Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程
  • 【零基础入门unity游戏开发——unity通用篇36】向量(Vector3)的基本操作和运算(基于unity6开发介绍)
  • linux中的docker下载镜像
  • 【影刀RPA_启动任务api】
  • 23- TIME-LLM: TIME SERIES FORECASTING BY REPRO- GRAMMING LARGE LANGUAGE MODELS
  • Python语言的数据类型
  • python学opencv|读取图像(三十七 )截断处理