selenium - 鼠标和键盘操作

419 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详

鼠标操作

鼠标操作实现方式

selenium将操作鼠标的方法封装在ActionChains类中,使用之前需要先进行实例化action = ActionChains(driver),在执行任何鼠标操作之后,都需要执行perform()方法,该方法才是真正的将操作进行执行。使用步骤总结如下:

  1. 实例化ActionChains对象
  2. 调用鼠标的事件方法(右击、双击等)
  3. 调用对象执行方法perform()

鼠标右击操作 - context_click(element)

应用场景:右击出现一些隐藏菜单(属于应用内部的隐藏菜单)。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
​
​
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
action = webdriver.ActionChains(driver=driver)
ele = driver.find_element(By.XPATH, '//*[@id="su"]')
action.context_click(ele)  # 模拟右键操作
# action.click()  # 模拟单击操作
action.perform()  # 真正执行操作
time.sleep(1)
driver.quit()

鼠标双击操作 - double_click(element)

action.double_click(element)
action.perform()

鼠标拖动操作 - drag_and_drap(source, target)

应用场景:把一个元素拖动到另一个位置,比如说植物大战僵尸将植物拖动到地皮上

action.drag_and_drop(source, target)
# source:被拖动的元素
# target:目标元素
action.perform()
​
# 示例
action = webdriver.ActionChains(driver=driver)
ele_src = driver.find_element(By.XPATH, '//*[@id="su"]')
ele_tar = driver.find_element(By.XPATH, '//*[@id="s-top-left"]/a[1]')
action.drag_and_drop(ele_src, ele_tar)
action.perform()  # 真正执行操作

鼠标悬停操作 - move_to_element

应用场景:鼠标悬停在某一个位置,显示一些信息.

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
​
​
driver = webdriver.Chrome()
driver.get("https://cn.bing.com/")
driver.maximize_window()
action = webdriver.ActionChains(driver=driver)
ele = driver.find_element(By.XPATH, '//*[@id="sb_form_q"]')
action.move_to_element(ele)  # 模拟鼠标悬停,悬停在输入框上
action.perform()  # 真正执行操作
time.sleep(1)
driver.quit()

鼠标单元素拖动

应用场景:滑块验证码

action = webdriver.ActionChains(driver=driver)
action.drag_and_drop_by_offect(source, xoffset, yoffset)
action.perform()
# source:鼠标按下的元素
# xoffset/yoffset : 鼠标横向和纵向移动的像素单位,建议比实际拖动的像素单位大5个像素

键盘操作 - send_keys()

应用场景:模拟键盘上的键盘操作,比如快捷键

selenium把键盘相关操作封装在selenium.webdriver.common.keys import Keys中,常用的键盘操作如下:

单个键盘查看源码可以参考键盘操作。

组合键:多个键盘操作之间以,隔开

比如ctrl+a:则是send_keys(Keys.CONTROL, 'a'),后面的a直接写字符串a即可。

ctrl+shift+i == Keys.CONTROL, Keys.SHIFT,'i'

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
​
​
driver = webdriver.Chrome()
driver.get("https://cn.bing.com/")
driver.maximize_window()
​
ele = driver.find_element(By.XPATH, '//*[@id="sb_form_q"]')
ele.send_keys('蜡笔小新')
time.sleep(2)
ele.send_keys(Keys.CONTROL, 'a')  # 全选操作
time.sleep(2)
ele.send_keys(Keys.BACKSPACE)  # 删除 不全选默认删除最后一个字符
​
time.sleep(1)
driver.quit()