携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详
鼠标操作
鼠标操作实现方式
selenium将操作鼠标的方法封装在ActionChains
类中,使用之前需要先进行实例化action = ActionChains(driver)
,在执行任何鼠标操作之后,都需要执行perform()
方法,该方法才是真正的将操作进行执行。使用步骤总结如下:
- 实例化ActionChains对象
- 调用鼠标的事件方法(右击、双击等)
- 调用对象执行方法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()