1.简介

有些页面的内容不是打开页面时直接加载的,需要我们滚动页面,直到页面的位置显示在屏幕上时,才会去请求服务器,加载相关的内容,这就是我们常说的懒加载。还有就是在日常工作和学习中,经常会遇到我们的页面内容较多,一个屏幕范围无法完整展示内容,我们就需要滚动滚动条去到我们想要的地方,所以有时候我们就需要操作滚动条向下滚动的操作。其实前边的文章也提到过滚动条的操作,今天主要是将各种宏哥知道的方法进行一下汇总和总结,方便大家查找和学习。

2.通过定位元素操作滚动条

2.1原理

当页面比较长,超过浏览器的高度时候,有些元素虽然没有显示,但是实际已经加载到页面上了,只是因为滚动条未滚动至下面,所以看不到。在Chrome中可通过F12调试查看页面元素。而不是元素根本就没有,当滚动时才延迟加载。是可以直接操作的,而且playwright 在点击元素的时候,会自动滚动到元素出现的位置,这点是非常人性化的。但有些元素需要滚动到元素出现的位置,让元素处于可视的窗口上才能去操作。 或者网站是通过上拉加载的方式请求接口实现翻页的,这个时候就需要控制滚动条实现向下拖动,实现翻页的功能。Playwright提供了scroll_into_view_if_needed()方法,可以控制滚动条滚动到元素显示的位置。可使用此种方式。达到以操作滚动条的目的。

2.2示例

# 页面滚动条,滚动直到此出现元素
page.locator("//div[contains(@class, 'react-grid-item')][last()]").scroll_into_view_if_needed()
# 元素说明:找到class里包含‘react-grid-item’属性最后一个属性

2.3实战

接下来我们以163网站为例看一下该方法的使用。

2.3.1代码设计

2.3.2参考代码
# coding=utf-8

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-03-24
@author: 北京-宏哥
公众号:北京宏哥
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-50-滚动条操作
'''
# 3.导入模块 from playwright.sync_api import Playwright, sync_playwright, expect def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.163.com/")
page.locator('//*[@id="lazy_subfoot_js"]/div/div/div[1]/div/div[1]/div[3]/a[5]').scroll_into_view_if_needed()
page.wait_for_timeout(2000)
page.close()
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
2.3.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作(宏哥这个定位的是最后的“国际足球”,所以滚动到底部)。如下图所示:

3.通过调用鼠标API操作滚动条

3.1原理

主要是通过解决延迟加载时间问题,之前是因为加载时间长延迟加载,不会滚动,这里通过直接缩短加载时间,间接操作滚动条。在页面中如果有两个滚动条,要操作目标滚动条,首先要使用当前光标移动至滚动条所在框中(div 、iframe等),才可以进行操作。

3.2示例

# 光标移动至滚动条所在框中
page.click("div.content-main")
# 滚动鼠标 , 参数给一个较大值,以保证直接移动至最后
page.mouse.wheel(0,10000)

3.3实战

接下来我们以163网站为例看一下该方法的使用。

3.3.1代码设计

3.3.2参考代码
# coding=utf-8

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-03-24
@author: 北京-宏哥
公众号:北京宏哥
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-50-滚动条操作
'''
# 3.导入模块 from playwright.sync_api import Playwright, sync_playwright, expect def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.163.com/")
# 光标移动至滚动条所在框中
page.click("#ne_wrap")
# 滚动鼠标 , 参数给一个较大值,以保证直接移动至最后
page.mouse.wheel(0, 10000)
page.wait_for_timeout(2000)
page.close()
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
3.3.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

4.JavaScript脚本操作滚动条

4.1原理

可以使用JS语句,定位滚动条的位置到最下面,从而实现页面的向下滚动。这种方法一般来说就是终极大招,如果这个都不行,可能就没有办法了。

4.2示例

page.evaluate("var q=document.documentElement.scrollTop=滚动条的位置")

4.3实战

接下来我们以163网站为例看一下该方法的使用。

4.3.1代码设计

4.3.2参考代码
# coding=utf-8

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-03-24
@author: 北京-宏哥
公众号:北京宏哥
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-50-滚动条操作
'''
# 3.导入模块 from playwright.sync_api import Playwright, sync_playwright, expect def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.163.com/")
page.evaluate("var q=document.documentElement.scrollTop=50000")
page.mouse.wheel(0,7000)
page.wait_for_timeout(2000)
page.close()
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
4.3.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作(宏哥的滚动条的位置设置的值比较大,所以滚动到底部)。如下图所示:

5.小结

关于滚动条的操作,宏哥就分享到这里,其实还有别的方法可以实现,宏哥这里只不过列举了几种常见的操作方法,小伙伴或者童鞋们要做到举一反三,随机应变,不要死搬硬套,要灵活变通。宏哥这些方法在前边的文章中或多或少的讲解到,这里只不过对其进行总结,方便大家学习和参考。好了,时间不早了,今天就分享到这里!感谢您耐心的阅读。

《最新出炉》系列入门篇-Python+Playwright自动化测试-50-滚动条操作的更多相关文章

  1. Spring实践系列-入门篇(一)

    本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...

  2. Google C++测试框架系列入门篇:第三章 基本概念

    上一篇:Google C++测试框架系列入门篇:第二章 开始一个新项目 原始链接:Basic Concepts 词汇表 版本号:v_0.1 基本概念 使用GTest你肯定会接触到断言这个概念.断言是用 ...

  3. Google C++测试框架系列入门篇:第二章 开始一个新项目

    上一篇:Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest? 原始链接:Setting up a New Test Project 词汇表 版本号:v_0.1 开始一个新项目 ...

  4. 深入浅出ASP.NET Core系列(入门篇)

    入门篇 1.1.专题介绍 1.2.环境安装 1.3.创建项目 1.4部署到IIS 1.5准备CentOS和Nginx环境 1.6部署到CentOS 2.1命令行和JSON的配置 2.2Bind建立配置 ...

  5. python+selenium之浏览器滚动条操作

    from selenium import webdriver import time #访问百度 driver=webdriver.Ie() driver.get("http://www.b ...

  6. 0x00-Kali Linux 系列入门篇

    Kali Linux介绍篇 Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Li ...

  7. Node.js 从入门到茫然系列——入门篇

    在创建服务的时候,我们一般代码就是: var http = require("http"); var server = http.createServer(function(req ...

  8. Google C++测试框架系列入门篇:第一章 介绍:为什么使用GTest?

    原始链接:Introduction: Why Google C++ Testing Framework? 词汇表 版本号:v_0.1 介绍:为什么使用GTest? GTest帮助你写更好的C++测试代 ...

  9. python - 接口自动化测试 - MysqlUtil - 数据库操作封装

    # -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: mysql_util.py @ide: PyCharm C ...

  10. Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

随机推荐

  1. Webpack Proxy工作原理?为什么能解决跨域?

    一.是什么 webpack proxy,即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题(浏览器安全策略限制) 想要实 ...

  2. 《c#高级编程》第5章C#5.0中的更改(十)——异步编程

    C#异步编程是一种在单线程上实现并发执行的技术,它通过使用异步方法.任务等高级概念,使得应用程序能够更好地响应用户操作.处理大量数据和操作外部资源.C#异步编程的核心概念包括: 异步方法:使用 asy ...

  3. CSS之定位Position

    前言 之前在<CSS之浮动>中,我当时是想一起说说定位的,因为我在很多地方看到有把float和position放在一起讲的,说它们的一些属性值可以使元素脱离文档流,但是没想到在准备内容的时 ...

  4. 力扣633(java&python)-平方数之和(中等)

    题目: 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例 1: 输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2: 输 ...

  5. 【pytorch学习】之自动微分

    5 自动微分 求导是几乎所有深度学习优化算法的关键步骤.虽然求导的计算很简单,只需要一些基本的微积分.但对于复杂的模型,手工进行更新是一件很痛苦的事情(而且经常容易出错).深度学习框架通过自动计算导数 ...

  6. 阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾

    简介: 本文介绍了 ACK One 近期发布的 3 个主要特性,覆盖了多集群管理的 3 个主要场景,跨集群服务发现与访问.多集群全局监控.应用容灾.除多集群管理外,ACK One 更是支持连接并管理任 ...

  7. PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及

    简介: PolarDB-X 2.1 是 PolarDB-X 非常重要的版本,也是第一次 PolarDB-X 分布式数据库的产品可以作为企业级的分布式数据库真正部署到客户的生产环境使用. PolarDB ...

  8. Java Map中那些巧妙的设计

    简介: 他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践.然而,大多数有关Java Map原理的科普类文章都是专注于"点",并没有连成"线", ...

  9. 全球首款乘云而来的存储产品CDS诞生!

    ​9月22日,阿里云发布全球首款"云定义存储"(Cloud Defined Storage,CDS)产品.作为一款本地部署的分布式存储产品,阿里云CDS拥有与公共云存储相同的技术架 ...

  10. [Go] Colly 使用 POST 提交 application/x-www-form-urlencoded 示范

    Colly 提供了 Post 和 PostRaw 方法,它们的参数类型不一样,需要注意. 目标地址接受指定的 Content-Type,可以通过设置 request Header. 局部代码: // ...