Python+Selenium实现网站滑块拖动操作

实现效果

示例代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

import time

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

service = Service(r"D:\software\chromedriver.exe")

driver = webdriver.Chrome(service=service)

# 控制浏览器访问url地址

driver.get("https://www.taobao.com/")

# 隐式等待

driver.implicitly_wait(1)

account = 'account'  # 账号

password = 'abc123'  # 密码

# 找到“登录”位置

driver.find_element(by=By.CSS_SELECTOR, value="div.member-ft > div > a.btn-login").click()

driver.maximize_window()

driver.implicitly_wait(1)

# 切换页面 获取当前页面handle 获取所有页面的handle 列表的后面

driver.switch_to.window(driver.window_handles[1])

# 找到“账号名”输入框

el_account = driver.find_element(by=By.CSS_SELECTOR, value='#fm-login-id')

print(el_account.text)

driver.implicitly_wait(1)

# 点击账号输入框

el_account.click()

# 输入账号

el_account.send_keys(account)

driver.implicitly_wait(1)

# 找到“密码”输入框

el_password = driver.find_element(by=By.XPATH, value='//*[@id="fm-login-password"]')

# print(el_password.text)

# print(el_password.location)

# 点击密码输入框

el_password.click()

# 输入密码

el_password.send_keys(password)

driver.implicitly_wait(2)

# 找到“登录”按钮,并点击

el_login_btn = driver.find_element(by=By.XPATH, value='//*[@id="login-form"]/div[4]/button')

el_login_btn.click()

# print(el_login_btn.location)

driver.implicitly_wait(1)

# 切换frame

driver.switch_to.frame('baxia-dialog-content')

# 找到滑块,获取宽高

el1 = driver.find_element(by=By.XPATH, value='//*[@id="nc_1_n1z"]')

print(el1.size['width'])

print(el1.size['height'])

# 找到拖动区域,获得宽高

el2 = driver.find_element(by=By.XPATH, value='//*[@id="nc_1__scale_text"]')

print(el2.size['width'])

print(el2.size['height'])

driver.implicitly_wait(2)

# 创建一个事件链对象

chains = ActionChains(driver)

# 实现滑块拖动

chains.drag_and_drop_by_offset(el1, el2.size['width'], -el2.size['height'])

# 事件提交

chains.perform()

time.sleep(5)

# 关闭浏览器

driver.close()

driver.quit()

方法补充

在做登录测试时,有些站点会有“滑块”验证功能,自动化测试可用对滑块拖拉操作的方式处理:

需求:携程注册“滑块”操作

思路:

按住左边滑块

拖放到最右边

用键盘事件中:drag_and_drop_by_offset

代码为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#大牛测试:轻轻松松自动化

#QQ:2574674466

#专注自动化测试技术传播

from selenium import webdriver

import time

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.common.action_chains import ActionChains

  

driver = webdriver.Chrome()

driver.get("https://passport.ctrip.com/user/reg/home")

driver.find_element_by_css_selector("#agr_pop > div.pop_footer > a.reg_btn.reg_agree").click()

  

sour = driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-drop-btn")

print(sour.size['width'])

print(sour.size['height'])

  

ele =driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-bg-bar")

print(ele.size['width'])

print(ele.size['height'])

time.sleep(2)

ActionChains(driver).drag_and_drop_by_offset(sour,ele.size["width"],-ele.size["heigh

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

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

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

相关文章

c++基础(对c的扩展)

文章目录 命令空间引用基本本质引用作为参数引用的使用场景 内联函数引出基本概念 函数补充默认参数函数重载c中函数重载定义条件函数重载的原理 命令空间 定义 namespace是单独的作用域 两者不会相互干涉 namespace 名字 { //变量 函数 等等 }eg namespace nameA {int num;v…

小狗伪原创轻松实现文案二次原创

摘要:在学术和商业领域,文案的原创性和独特性至关重要。然而,很多时候我们需要对已有的文案进行修改或重写。这时,小发猫、小狗伪原创等论文降重工具就派上了用场。这些工具能帮助我们快速、高效地完成文案的二次原创,…

vue3 接入 Element Plus

vue3 接入 Element Plus vue3 发布已经很久了,官方也已经发布公告,自2023年12月31日起停止对 vue2 版本的维护更新,因此,vue3 正式登上了历史的舞台。组件库一直是前端开发的利器,减少了开发者开发复杂度,提…

【UE5.1】给森林添加天气效果

在上一篇博客(【UE5.1】程序化生成Nanite植被)基础上给森林添加天气交互效果,角色和雪地、水坑的交互效果。 目录 效果 步骤 一、准备工作 二、添加超动态天空 2.1 修改时间 2.2 昼夜交替 三、添加超动态天气 3.1 改变天气 3.2 …

JRT打印元素绘制协议之-A4Double

以前打印相信很多人因为A4打印两个报告头大过,M要把一堆报告既有A4的也有A5的还有微生物的,可能输出Page还不那么严谨。要么换页不对叠加了、要么多空白页、中间夹杂A4报告就更加头大。也有的人为了打印页码的共几页而头大。 借助新设计的优势&#xff…

JAVA电商平台 免 费 搭 建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

在数字化时代,电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念,为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端,包括平台管理、商家端、买家平台、微服务平台等,涵盖了pc端、…

【数据结构——二叉树】二叉树及其应用2023(头歌习题)【合集】

目录 第1关:括号表示法创建二叉树任务描述相关知识编程要求测试说明完整代码 第2关:先序序列创建二叉树任务描述相关知识二叉树的前序遍历如何创建一颗二叉树伪代码如下: 二叉树的中序遍历 编程要求测试说明完整代码 第3关:计算二…

图片中src属性绑定不同的路径

vue3 需求是按钮disable的时候,显示灰色的icon;非disable状态,显示白色的icon 一开始src写成三元表达式,发现不行,网上说src不能写成三元表达式,vue会识别成字符串 最后的解决方案 同时,发现…

打造炫酷粒子效果的前端利器tsParticles

前端潮流速递 :打造炫酷粒子效果的前端利器tsParticles 在现代前端开发中,动画和视觉效果是吸引用户的关键元素之一。而实现炫酷而引人入胜的粒子效果,常常需要耗费大量的时间和精力。然而,有了 tsParticles,这一切变…

AIGC年度回顾!2024向量数据库是否还是AI发展方向之一?

引言 2023 年,是 AI 技术大爆发的一年,从年初到年末,全球关心技术发展的人们见证了一次次的 AI 技术升级,也逐步加深着对 AGI 发展的畅想。而伴随着生成式人工智能的飞速发展,向量数据库以其独特的技术优势逐渐崭露头角…

Linux/Unix/国产化操作系统常用命令(二)

目录 后CentOS时代国产化操作系统国产化操作系统有哪些常用Linux命令关于Linux的LOGO 后CentOS时代 在CentOS 8发布后,就有了一些变化和趋势,可以说是进入了"后CentOS时代"。这个时代主要表现在以下几个方面: CentOS Stream的引入…

BMS均衡技术

一、电池的不一致性? 每个电池都有自己的“个性”,要说均衡,得先从电池谈起。即使是同一厂家同一批次生产的电池,也都有自己的生命周期、自己的“个性”——每个电池的容量不可能完全一致。例如以下的两个原因都会造成电池不一致…