鼠标操作
1. 鼠标操作实现方式
- Selenium 中通过ActionChains类来进行鼠标操作的方法和步骤:
导入ActionChains类
-
- 通过ActionChains实例化鼠标对象 action = ActionChains(driver) # driver表示的是浏览器驱动对象
- 调用鼠标的事件方法
- 调用鼠标的执行方法 action.perform()
- 示例
-
- 实例化对象:action = ActionChains(driver)
- 方法:
-
-
- 1.context_click(element) 右击
- 2.double_click(element) 双击
- 3.drag_and_drop(source, target) 拖动
- 4.move_to_element(element) 悬停
- 5.drag_and_drop_by_offset(element, x, y) 单元素拖动
- 6.perform() 执行
-
2. 鼠标常用操作实操
1. 鼠标右击操作
右击事件方法 action.context_click(element) # element表示的是一个元素对象
代码示例:
# 导包
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()
# 打开baidu网站
driver.get("https://www.baidu.com")
# 点击页面右上角【登录】按钮,进入登录页面
driver.find_element(By.ID, "s-top-loginbtn").click()
'''
"右击"
调用鼠标右击的方法点击登录二维码
'''
# 创建鼠标对象
action = ActionChains(driver)
# 定位到登录页面二维码,鼠标右键点击二维码
time.sleep(5)
element = driver.find_element_by_class_name("tang-pass-qrcode-img")
action.context_click(element)
# 执行右键点击
action.perform()
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
2. 鼠标双击操作
调用鼠标双击事件方法 action.double_click(element) # element表示是元素对象
代码示例:
# 导包
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()
# 打开baidu网站
driver.get("https://www.baidu.com")
# 点击页面右上角【登录】按钮,进入登录页面
driver.find_element(By.ID, "s-top-loginbtn").click()
'''
"双击"
定位到手机号输入框中输入18888888888
鼠标双击点击输入框,复制已经输入的手机号
'''
# 创建鼠标对象
action = ActionChains(driver)
# 定位到手机号输入框中输入18888888888
time.sleep(3)
element = driver.find_element(By.CSS_SELECTOR, "[name='userName']")
element.send_keys("18888888888")
# 执行双击输入框,复制已经输入的手机号
action.double_click(element)
action.perform()
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
3. 鼠标拖动操作
调用鼠标拖动事件方法 action.drag_and_drop(source, target) # source表示的是源元素,被拖动的元素; target表示是目标源,也就是要拖动到哪个元素上。
代码示例:
# 导包
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()
# 打开baidu网站
driver.get("https://www.baidu.com")
# 点击页面右上角【登录】按钮,进入登录页面
driver.find_element(By.ID, "s-top-loginbtn").click()
'''
"拖动"
把登录二维码拖动到手机号输入框中
'''
# 创建鼠标对象
action = ActionChains(driver)
# 把登录二维码拖动到手机号输入框中
time.sleep(5)
element_source = driver.find_element_by_class_name("tang-pass-qrcode-img") # 源元素位置
element_target = driver.find_element(By.CSS_SELECTOR, "[name='userName']") # 目标元素位置
action.drag_and_drop(element_source, element_target)
# 执行把登录二维码拖动到手机号输入框中(仅为演示效果)
action.perform()
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
4. 鼠标悬停操作
调用鼠标悬停事件方法 action.move_to_element(element) # element表示的是元素对象
代码示例:
# 导包
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()
# 打开baidu网站
driver.get("https://www.baidu.com")
# 点击页面右上角【登录】按钮,进入登录页面
driver.find_element(By.ID, "s-top-loginbtn").click()
'''
"鼠标悬停"
定位到"下载百度APP"上悬停鼠标,显示下载二维码
'''
# 创建鼠标对象
action = ActionChains(driver)
# 定位到"下载百度APP"上悬停鼠标
time.sleep(3)
element = driver.find_element(By.CSS_SELECTOR, ".pass-link")
# 执行悬停鼠标到"下载百度APP",显示下载二维码
action.move_to_element(element)
action.perform()
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
5. 鼠标单元素拖动操作
调用鼠标单元素拖动事件方法 action.drag_and_drop_by_offset(element, x, y) x, y 表示的元素拖动时横向和纵向移动的距离,单位为像素, element表示的是元素对象 移动的像素最终要比在web页面中看到的移动像素值要大5-10像素(实际应用在滑动获取验证码中,示例只为演示效果)
代码示例:
'''
模拟鼠标拖动滑块验证码,实际拖动的像素数需要具体问题具体分析
'''
element = driver.find_element(By.CSS_SELECTOR, '.handler_demo')
# 创建鼠标对象
action = ActionChains(driver)
# 调用鼠标拖动滑块验证码
action.drag_and_drop_by_offset(element, 200, 0)
# 执行拖动
action.perform()
# 退出浏览器驱动
driver.quit()
键盘操作
- 模拟键盘上面的快捷键的操作
- 调用键盘操作的快捷键的方法 element.send_keys(快捷键的键值)
- 注意键盘操作需要与正在使用的电脑键盘设置保持一致。例如全选/复制/粘贴,控制键可能是CONTROL,也可能是COMMAND
- 方法:
导入Keys类 (注意K是大写)
单键值: 直接传入对应的键值 示例:send_keys(Keys.BACK_SPACE)
组合键: 键值之间由逗号分隔 示例:send_keys(Keys.CONTROL, Keys.SHIFT, 'i') - 常用的快捷键 :
-
- send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
- send_keys(Keys.SPACE) 空格键(Space)
- send_keys(Keys.TAB) 制表键(Tab)
- send_keys(Keys.ESCAPE) 回退键(Esc)
- send_keys(Keys.ENTER) 回车键(Enter)
- send_keys(Keys.CONTROL,'a') 全选(Ctrl+A) /send_keys(Keys.COMMAND,'a')
- send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)/send_keys(Keys.COMMAND,'c') 复制(Ctrl+C
- send_keys(Keys.CONTROL, 'v') 粘贴 /send_keys(Keys.COMMAND, 'v')
# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 实例化浏览器驱动
driver = webdriver.Chrome()
driver.maximize_window()
# 打开baidu网站
driver.get("https://www.baidu.com")
# 点击页面右上角【登录】按钮,进入登录页面
driver.find_element(By.ID, "s-top-loginbtn").click()
# 定位到手机号输入框中输入1888888888876
time.sleep(3)
element = driver.find_element(By.CSS_SELECTOR, "[name='userName']")
element.send_keys("1888888888876")
time.sleep(2)
element.send_keys(Keys.BACK_SPACE) # 删除最后一个字符串
element.send_keys(Keys.BACK_SPACE) # 删除倒数第二个字符串
# 全选输入的内容
# element.send_keys(Keys.CONTROL, 'a')
element.send_keys(Keys.COMMAND, 'a') # 与正在使用的电脑键盘设置保持一致
time.sleep(2)
# 复制输入的内容
# element.send_keys(Keys.CONTROL, 'c')
element.send_keys(Keys.COMMAND, 'c') # 与正在使用的电脑键盘设置保持一致
# 粘贴复制的内容到密码框
element_new = driver.find_element(By.CSS_SELECTOR, '.pass-text-input-password')
# element_new.send_keys(Keys.CONTROL, 'V')
element_new.send_keys(Keys.COMMAND, 'V') # 与正在使用的电脑键盘设置保持一致
# 勾选"阅读并接受"的复选框
element = driver.find_element_by_id("TANGRAM__PSP_11__isAgree")
element.click()
time.sleep(1)
# 点击回车键确定
element.send_keys(Keys.ENTER)
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()