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

【Python】Selenium模拟滚动鼠标,向下拖动下拉按钮,直至网页页面向下滑的方法

我们在使用Selenium获取网页元素的时候,有时候会遇到网页要加载刷新,要用鼠标下拉滚动鼠标更新页面,才能显示到我们需要的元素。

这时候就要模拟向下拖动、下拉按钮或者滚动操作了。

以下是一些基本的步骤和代码示例,展示如何使用Selenium来模拟向下拖动下拉按钮的:

事先准备:

#导入必要的Selenium库:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By

#启动WebDriver:
driver = webdriver.Chrome()  # 或者使用其他浏览器
driver.get("你的网页URL")

1. 方法一:使用scrollIntoView滚动至元素可见:

实现效果:直接拉到目标元素的位置

如果下拉按钮是一个元素,可以使用scrollIntoView方法将其滚动到可视范围内。例如:

element = driver.find_element(By.ID, "your_element_id")
driver.execute_script("arguments[0].scrollIntoView();", element)

这种方法可以将指定的元素,滚动到浏览器窗口的可视范围内。

但是实现的效果不太连续。例如我们设置模拟滚动鼠标,直到看到网页最底下的元素。

这个方法实现的效果就会是,直接滑动到定位的element的位置,但不会又有持续慢慢下拉的过程。

2.方法二:使用JS代码直接滚动到页面底部:

实现效果:直接拉到网页底部的位置

跟上面的效果类似,如果要直接跳过滚动,直接跳到定位到网页最底,就直接用下面JS的这个代码:

driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

这是利用execute_script方法执行JavaScript代码来实现滚动,这种方法可以滚动到页面的底部,如果下拉按钮会触发页面滚动,这将是一个有效的方法。

3. 方法三:JS限定滚动次数分步滚动页面

实现效果:一步步滚动页面,但是会限定多少次来滚动

如果页面内容很长,不想一下子就滚到底部。

可以采用分步滚动页面,每次向下滚动一定的像素,直到达到页面底部。

则可以这样写:

time.sleep(3)
row_times=6 #固定滚动6次
top = 0
for _ in range(row_times):
    top = top + random.randint(200, 1000) #计算每次滚动的距离
    js = f"document.documentElement.scrollTop={top}"
    driver.execute_script(js)
    time.sleep(random.uniform(1, 2))  # 每次滚动后等待多少秒,以便观察效果,且模拟人的行为    

这种方法通过循环滚动页面,适用于无限滚动页面,如果页面比较长,适合多滚动几次。

4. 方法四:使用ActionChains模拟滚动:

实现效果:模拟鼠标下拉拖动页面向下移动,但是会占用鼠标的使用。

模拟鼠标移动到下拉按钮上

element = driver.find_element(By.ID, "your_element_id")
ActionChains(driver).move_to_element(element ).perform()

或者,

模拟点击下拉按钮

ActionChains(driver).click(element).perform()

以上方法可以根据具体的测试场景和需求进行选择和调整。

在这里插入图片描述


http://www.kler.cn/a/445273.html

相关文章:

  • C盘下的文件夹
  • 【python虚拟环境安装】linux centos 下的python虚拟环境配置
  • 【练习Day20】字符串变形
  • webpack处理图片资源
  • Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架
  • React 19有哪些新特性?
  • vue3+vite 引入动画组件库 Inspira UI
  • Python机器学习算法KNN、MLP、NB、LR助力油气钻井大数据提速参数优选及模型构建研究...
  • flask-admin+Flask-WTF 实现实现增删改查
  • HTMLCSS:酷炫的3D开关控件
  • 设计模式详解(十一):模板方法——Template Method
  • 数字化供应链:背景特点
  • <论文>初代GPT长什么样?
  • es-head安装使用以及常见问题
  • Spring框架(1)——IOC(控制权反转)的实现
  • 深度比较:OpenNI2 SDK与Orbbec SDK的功能、优势和选择指南
  • parquet类型小文件合并
  • ESP32单片机开发
  • uniApp上传文件踩坑日记
  • 【C++ 无限循环】1625. 执行操作后字典序最小的字符串|1992
  • 深度学习在岩土工程中的应用与实践
  • PHP代码审计学习--zzcms8.1
  • 打靶记录22——Tomato
  • workman服务端开发模式-GatewayWorker的使用
  • JNDI基础
  • 【Threejs】从零开始(八)--贴图