鼠标操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>师不予测试笔记</title>
</head>
<body>
<a>用户名:</a>
<input id="username" class="username">
<a>密码</a>
<input id="password" name="password">
<button class="login">登录</button>
</script>
</body>
</html>
背景
用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。
而selenium给我们提供了一个类来处理这类事件—— ActionChains
有哪些鼠标操作呢?
- 执行操作
- 左键、右键单击、双击
- 鼠标悬停到元素、偏移处
- 长按
- 拖动
执行操作
perform() 方法
主要是调用其他操作方法后,都要再次调用这个方法,表示执行某个鼠标操作,后面会有例子
左键、右键单击、双击
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/1/7 19:19
# @Author : shisuiyi
# @File : action_key.py
# @Software: win10 Tensorflow1.13.1 python3.9
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
# 创建实例
chains = ActionChains(driver)
# 访问网址
driver.get("D:\Lemon\py45\webatuo\ActionChains.html")
# 登录按钮
username = driver.find_element('id', "username")
login_btn = driver.find_element(By.CLASS_NAME, "login")
password = driver.find_element("id", "password")
# 左键点击
chains.click(username).perform()
# 右键点击
chains.context_click(username).perform()
# 双击
chains.double_click(password).perform()
鼠标悬停到元素、偏移处
# 悬停到设置按钮
chains.move_to_element(login_btn).perform()
# 悬停到指定偏移量
chains.move_to_element_with_offset(login_btn, 2, 2).perform()
知识点
move_to_element_with_offset() 是先找到元素,再根据元素位置偏移指定偏移量
长按
# 长按
chains.click_and_hold(login_btn).perform()
拖动
# 拖动1
chains.drag_and_drop(source=username, target=password)
# 拖动2
chains.drag_and_drop_by_offset(source=username, xoffset=20, yoffset=20)
知识点
- drag_and_drop 将源元素拖动到目标元素处
- drag_and_drop_by_offset 将源元素拖动指定偏移量
键盘操作
- 删除键
- 空格键
- 制表键
- 回退键
- 回车键
- 全选
- 复制
- 剪切
- 粘贴
- F1-F12
- ......其实就是所有键盘都能模拟,包括alt、shift、insert、delete、home等等等...这里就不举例了,看源码很容易懂
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/1/7 19:19
# @Author : shisuiyi
# @File : action_key.py
# @Software: win10 Tensorflow1.13.1 python3.9
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains, Keys
driver = webdriver.Chrome()
# 创建实例
chains = ActionChains(driver)
driver.get("http://www.baidu.com")
# 找到搜索框
inputElement = driver.find_element('id', "kw")
# 输入搜索内容
inputElement.send_keys("师不予测试笔记")
# ctrl+a全选
inputElement.send_keys(Keys.CONTROL, "a")
sleep(1)
# ctrl+c 复制输入框内容
inputElement.send_keys(Keys.CONTROL, 'c')
sleep(1)
# ctrl+x 剪切输入框内容
inputElement.send_keys(Keys.CONTROL, 'x')
sleep(1)
# ctrl+v 粘贴输入框内容
inputElement.send_keys(Keys.CONTROL, 'v')
sleep(1)
# 空格键
inputElement.send_keys(Keys.SPACE)
sleep(1)
# 后退键
inputElement.send_keys(Keys.BACKSPACE)
sleep(1)
# tab键
inputElement.send_keys(Keys.TAB)
sleep(1)
# 回车键
inputElement.send_keys(Keys.ENTER)
# 刷新页面
inputElement.send_keys(Keys.F5)
补充:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/1/7 19:19
# @Author : shisuiyi
# @File : action_key.py
# @Software: win10 Tensorflow1.13.1 python3.9
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains, Keys
driver = webdriver.Chrome()
# 创建实例
chains = ActionChains(driver)
driver.get("http://www.baidu.com")
# 找到搜索框
inputElement = driver.find_element('id', "kw")
# 输入搜索内容
inputElement.send_keys("师不予测试笔记")
# # ctrl+a全选
# inputElement.send_keys(Keys.CONTROL, "a")
# 细化: ctrl 按下 + a + ctrl 松开
# key_down(value)——按键或者发送组合键:
# key_up(value)——释放一个按键:
chains.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform()
sleep(1)
# # ctrl+x 剪切输入框内容
# inputElement.send_keys(Keys.CONTROL, 'x')
chains.key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform()
sleep(1)
# ctrl+v 粘贴输入框内容
inputElement.send_keys(Keys.CONTROL, 'v')
sleep(3)
driver.quit()
评论