1.简介

上一篇中,主要是介绍了拖拽的各种方法的理论知识以及实践,今天宏哥讲解和分享一下划取字段操作。例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能。

2.划取字段操作

划取字段操作就是在一段文字中随机选中一段文字,或者在标记文字。当然了,这个在一些网站的登录也需要滑块验证等。

selenium中提供了ActionChains类来处理鼠标事件。这个类中有2个方法和滑块移动过程相关。click_and_hold():模拟按住鼠标左键在源元素上,点击并且不释放;release():松开鼠标按键。字面意思就可以理解这2个函数的作用。今天跟随宏哥看一下,playwright是如何处理这种测试场景的。

2.1牛刀小试

在一段文字中,随机划取一小段文字(这个感觉比较鸡肋,貌似没有什么卵用,但是宏哥还是说一下吧)。那么宏哥就用度娘的免责声明进行实践,划取其中的一小段文字。

使用locator.drag_to()执行拖放操作,实现自动化测试。

2.1.1代码设计

2.1.2参考代码
# coding=utf-8

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-22
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-中篇
''' # 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.baidu.com/duty")
page.wait_for_timeout(1000)
page.locator("//*/p").drag_to(page.locator('//*/ul[@class="privacy-ul-gap"]/li[1]'))
# page.drag_and_drop('//*/p', '//*/ul[@class="privacy-ul-gap"]/li[1]')
page.wait_for_timeout(3000)
# page.pause()
context.close()
browser.close() with sync_playwright() as playwright:
run(playwright)
2.1.3运行代码

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

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

使用page.drag_and_drop(locator, loacator),实现自动化测试。

2.1.4参考代码
# coding=utf-8

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-22
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-中篇
''' # 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.baidu.com/duty")
page.wait_for_timeout(1000)
# page.locator("//*/p").drag_to(page.locator('//*/ul[@class="privacy-ul-gap"]/li[1]'))
page.drag_and_drop('//*/p', '//*/ul[@class="privacy-ul-gap"]/li[1]')
page.wait_for_timeout(3000)
# page.pause()
context.close()
browser.close() with sync_playwright() as playwright:
run(playwright)

精确控制拖动操作,可以使用较低级别的手工方法,如locator.hover()、mouse.down()、mouse.move()和mouse.up()。来实现自动化测试。

2.1.5参考代码
# coding=utf-8

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-19
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-中篇
''' # 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.baidu.com/duty")
page.wait_for_timeout(1000)
page.locator('//*/p').hover()
page.mouse.down()
page.locator('//*/ul[@class="privacy-ul-gap"]/li[1]').hover()
page.mouse.up()
page.wait_for_timeout(3000)
# page.pause()
context.close()
browser.close() with sync_playwright() as playwright:
run(playwright)

3.项目实战

这里宏哥用java+selenium中的携程旅行,手机号查单页面的一个滑动,进行项目实战。如下图所示:

3.1思路说明

  • 使用locator定位到要拖动滑块元素,如元素名叫ele
  • 获取元素ele的bounding_box含4分属性值:x,y,width,height
  • 把鼠标移动到元素ele的中心点,中心点位置为:x+width/2,y+height/2
  • 按下鼠标
  • 计算出要移动的下一个位置,以长条滑块为例,拖动到长条头部实现解锁,那x的位置应该为x+width/2 + 某个固定值(足够大就好)
  • 执行移动操作,下一个位置坐标为:x+width/2 + 某个固定值,y+height/2
  • 释放鼠标

3.2调用方法

  • 元素定位:page.locator()
  • 获取元素位置及大小:ele.bounding_box()
  • 鼠标移动:page.mouse.move()
  • 按下鼠标:page.mouse.down()
  • 释放鼠标:page.mouse.up()

3.2代码设计

3.3参考代码

# coding=utf-8

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-07-22
@author: 北京-宏哥 QQ交流群:705269076
公众号:北京宏哥
Project: 《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-中篇
''' # 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()
#禁用爬虫检测的,然而试过没有卵用
context.add_init_script(path='C:\\Users\\DELL\\Downloads\\stealth.min.js')
page = context.new_page()
page.goto("https://passport.ctrip.com/user/member/fastOrder")
page.wait_for_timeout(2000)
#获取拖动按钮位置并拖动 //*[@id="slider"]/div[1]/div[2]
dropbutton=page.locator("//*[@id='slider']/div[1]/div[2]")
box=dropbutton.bounding_box()
page.mouse.move(box['x']+box['width']/2,box['y']+box[ 'height']/2)
page.mouse.down()
mov_x=box['x']+box['width']/2+280
page.mouse.move(mov_x,box['y']+box[ 'height']/2)
page.mouse.up()
page.wait_for_timeout(3000)
context.close()
browser.close() with sync_playwright() as playwright:
run(playwright)

3.4运行代码

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

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

4.小结

之前宏哥在java+selenium的文章中测试的时候,就会跳转到这个页面,之前说的是selenium检查机制,但是这里没有用selenium,怎么还会有这个,查了半天资料说是反爬虫机制。但是代码中加入反爬虫的机制不好使。有知道怎么回事的可以给宏哥留言。

4.1测试网站

测试链接:https://bot.sannysoft.com/

正常浏览结果:

宏哥然后加入暂停代码(page.pause()),在这个页面用网址监测一下,看到绕过Chrome的selenium反爬虫检测机制,但是还是会出现那个选择字的验证。查了半天也不知道怎么回事,有知道给宏哥留言,让宏哥学习学习。如下图所示:

好了,时间不早了,今天就分享和讲解到这里。

《最新出炉》系列初窥篇-Python+Playwright自动化测试-19-处理鼠标拖拽-中篇的更多相关文章

  1. 缩放系列(三):一个可以手势缩放、拖拽、旋转的layout

    弄了一个下午,终于搞出来了,PowerfulLayout 下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像b ...

  2. python - web自动化测试 - 元素操作 - 鼠标键盘

    # -*- coding:utf-8 -*- ''' @project: web学习 @author: Jimmy @file: 鼠标操作.py @ide: PyCharm Community Edi ...

  3. Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

  4. Spark系列-初体验(数据准备篇)

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 在Spark体验开始前需要准备环境和数据,环境的准备可以自己按照Spark官方文档安装.笔者选择使用CDH集群安装,可以参考笔者之前的文 ...

  5. Python系列之入门篇——HDFS

    Python系列之入门篇--HDFS 简介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系统,具有高容错性,适合部署在廉价的机器上.Python ...

  6. Python系列之入门篇——MYSQL

    Python系列之入门篇--MYSQL 简介 python提供了两种mysql api, 一是MySQL-python(不支持python3),二是PyMYSQL(支持python2和python3) ...

  7. python爬虫 scrapy2_初窥Scrapy

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  8. WWDC15 Session笔记 - Xcode 7 UI 测试初窥

    https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...

  9. Scrapy001-框架初窥

    Scrapy001-框架初窥 @(Spider)[POSTS] 1.Scrapy简介 Scrapy是一个应用于抓取.提取.处理.存储等网站数据的框架(类似Django). 应用: 数据挖掘 信息处理 ...

  10. 初窥Kaggle竞赛

    初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...

随机推荐

  1. 人工智能智能城市(AIinSmartCities)领域的100篇热门博客文章标题如下:

    目录 人工智能智能城市(AI in Smart Cities)领域的100篇热门博客文章标题如下: 1.<智能城市与大数据:未来城市大脑的发展方向> 2.<智能交通系统的设计与实现& ...

  2. 使用 JCommander 解析命令行参数

    前言 如果你想构建一个支持命令行参数的程序,那么 jcommander 非常适合你,jcommander 是一个只有几十 kb 的 Java 命令行参数解析工具,可以通过注解的方式快速实现命令行参数解 ...

  3. 从0开发WebGPU渲染引擎:开篇

    大家好,本系列会从0开始,开发一个基于WebGPU的路径追踪渲染器,使用深度学习降噪.DLSS等AI技术实现实时渲染:并且基于自研的低代码开发平台,让用户可以通过可视化拖拽的方式快速搭建自定义的Web ...

  4. 【NestJS系列】从Nest CLI开始入门

    初识Nest JS Nest 是一个渐进的 Node.js 框架,它可以在 TypeScript 和 JavaScript (ES6.ES7.ES8)之上构建高效.可伸缩的企业级服务器端应用程序. N ...

  5. kaggle中训练得到的output太大该怎么下载?

    最近在使用Kaggle平台训练自己的模型,但是训练结束之后由于模型过大导致output那里一直在加载(转圈),即使加载出来点击download也没有反应 下面借鉴知乎大佬的方法可以完美解决!通过将其压 ...

  6. Hexo博客yilia主题文章添加目录

    参考文章 添加目录的文章有一些是自己添加css文件和修主题配置 作者也更新了文章大体目录的功能 打开配置文件themes/yilia/_config.yml 你可以选择toc设置为1 或者2 toc: ...

  7. VueJS使用addEventListener的事件如何触发执行函数的this

    1.使用浏览器监听切屏为例 此处为考虑浏览器兼容性推荐使用:document.addEventListener 1.1.正常函数使用如下: let n = 0; let max = 3; // 切屏最 ...

  8. 图解 Vue 响应式原理

    Vue 初始化 模板渲染 组件渲染 为了便于理解,本文将从以下两个方面进行探索: 从 Vue 初始化,到首次渲染生成 DOM 的流程. 从 Vue 数据修改,到页面更新 DOM 的流程. Vue 初始 ...

  9. 解决pyinstaller生成的exe文件,在部分电脑无法运行的问题

    下载vc_redist.x64.exe并在不能运行的电脑上运行即可. vc_redist.x64.exe的作用:一款Visual C++的运行库,里面包含了一些Visual C++的库函数.Visua ...

  10. 配置oracle DG

    主库名称:prod1 使用asm存储数据 11.2.03 同一机器备库名称:dg 使用file存储数据 11.2.03 配置备库的参数文件cd $ORACLE_HOME/dbsvi initdg.or ...