selenium使用ActionChains模拟鼠标键盘操作

ActionChains介绍

ActionChains是一种自动化低级交互的方法,如鼠标移动、鼠标按钮操作、键盘按键和上下文菜单交互等。这对于执行更复杂的操作(如悬停和拖放)非常有用。

生成用户动作的过程:

  1. 创建ActionChains对象

    actions = webdriver.ActionChains(driver),初始化会创建一个动作列表

  2. 调用ActionChains对象的动作方法

    这些动作actions会存储在ActionChains的队列中

  3. 调用perform执行动作

    调用perform依次执行存放在队列中的动作

ActionChains 可以用于链模式:

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

也可以将动作一个个排列再执行:

actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()

ActionChains方法列表

动作 功能
perform() 执行所有已保存的动作
reset_actions() 清空所有已保存的动作
click(on_element=None) 点击某个元素,默认在鼠标当前位置点击
click_and_hold(on_element=None) 点击鼠标左键,不释放
context_click(element) 点击鼠标右键
double_click(element) 双击鼠标左键
drag_and_drop(source, target) 将source元素拖拽至target元素
drag_and_drop_by_offset(source, xoffset, yoffset) 将source元素拖拽至指定偏移量的位置
key_down(value, element=None) 按下按键(Control, Alt 或 Shift),不释放
key_up(value, element=None) 松开按键(Control, Alt 或 Shift)
move_by_offset(xoffset, yoffset) 将鼠标移动给定的偏移量
move_to_element(to_element) 将鼠标移到元素的中间
move_to_element_with_offset(to_element, xoffset, yoffset) 将鼠标移动到距元素左上角给定偏移量的位置
pause(seconds) 在指定时间内暂停输入
release(on_element=None) 释放按下的鼠标
send_keys(*keys_to_send) 发送某些键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) 发送某些键到指定元素

键盘操作

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://www.baidu.com")

search = driver.find_element(By.NAME, "wd")

search.send_keys("webdriver", Keys.ENTER)

按下按键 keyDown

keyDown用于模拟按下辅助按键(CONTROL, SHIFT, ALT)的动作

"""key_down 按下按键"""
action = webdriver.ActionChains(driver)
# 按下 'Control + A' 选中页面
action.key_down(Keys.CONTROL).send_keys("a").perform()

松开按键 KeyUp

keyUp用于模拟辅助按键(CONTROL, SHIFT, ALT)弹起或释放的操作

"""key_up 松开按键"""
action = webdriver.ActionChains(driver)

# 输入 QWERTYqwerty
action.key_down(Keys.SHIFT).send_keys_to_element(search, "qwerty").key_up(Keys.SHIFT).send_keys("qwerty").perform()

清空 Clear

clear清除可编辑元素的内容

search.send_keys("selenium")

time.sleep(3)

search.clear()

鼠标操作

移动鼠标 moveToElement

将鼠标移到元素的中间

from selenium import webdriver

driver = webdriver.Chrome()

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

# 找到 "更多" 元素
moreLink = driver.find_element_by_link_text("更多")

# 移动鼠标至 "更多" 
action = webdriver.ActionChains(driver)
action.move_to_element(moreLink).perform()

冻结页面(动态显示)

百度默认页面:

鼠标悬浮在“更多”上时,才会显示更多选项:

在浏览器console对话框中输入js代码,表示在5000ms后,执行debugger命令:

setTimeout(function(){debugger}, 5000)

进入debug状态,在5000ms内将鼠标移动至“更多”,即可冻结页面,再进行HTML操作。

posted @ 2021-09-23 15:46  ikventure  阅读(1250)  评论(0)    收藏  举报