Selenium_模拟键盘和鼠标操作(9)

模拟键盘键盘和鼠标操作主要使用到selenium的keys包,源码如下

class Keys(object):
    """
    Set of special keys codes.
    """

    NULL = 'ue000'
    CANCEL = 'ue001'  # ^break
    HELP = 'ue002'
    BACKSPACE = 'ue003'
    BACK_SPACE = BACKSPACE
    TAB = 'ue004'
    CLEAR = 'ue005'
    RETURN = 'ue006'
    ENTER = 'ue007'
    SHIFT = 'ue008'
    LEFT_SHIFT = SHIFT
    CONTROL = 'ue009'
    LEFT_CONTROL = CONTROL
    ALT = 'ue00a'
    LEFT_ALT = ALT
    PAUSE = 'ue00b'
    ESCAPE = 'ue00c'
    SPACE = 'ue00d'
    PAGE_UP = 'ue00e'
    PAGE_DOWN = 'ue00f'
    END = 'ue010'
    HOME = 'ue011'
    LEFT = 'ue012'
    ARROW_LEFT = LEFT
    UP = 'ue013'
    ARROW_UP = UP
    RIGHT = 'ue014'
    ARROW_RIGHT = RIGHT
    DOWN = 'ue015'
    ARROW_DOWN = DOWN
    INSERT = 'ue016'
    DELETE = 'ue017'
    SEMICOLON = 'ue018'
    EQUALS = 'ue019'

    NUMPAD0 = 'ue01a'  # number pad keys
    NUMPAD1 = 'ue01b'
    NUMPAD2 = 'ue01c'
    NUMPAD3 = 'ue01d'
    NUMPAD4 = 'ue01e'
    NUMPAD5 = 'ue01f'
    NUMPAD6 = 'ue020'
    NUMPAD7 = 'ue021'
    NUMPAD8 = 'ue022'
    NUMPAD9 = 'ue023'
    MULTIPLY = 'ue024'
    ADD = 'ue025'
    SEPARATOR = 'ue026'
    SUBTRACT = 'ue027'
    DECIMAL = 'ue028'
    DIVIDE = 'ue029'

    F1 = 'ue031'  # function  keys
    F2 = 'ue032'
    F3 = 'ue033'
    F4 = 'ue034'
    F5 = 'ue035'
    F6 = 'ue036'
    F7 = 'ue037'
    F8 = 'ue038'
    F9 = 'ue039'
    F10 = 'ue03a'
    F11 = 'ue03b'
    F12 = 'ue03c'

    META = 'ue03d'
    COMMAND = 'ue03d'

模拟键盘操作

对元素定位后使用send_keys就可以模拟键盘输入了

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
el = driver.find_element_by_id("kw")
el.send_keys("selenium")

el.send_keys(Keys.CONTROL + 'a')    # ctrl+a,全选
sleep(1)
el.send_keys(Keys.CONTROL + 'c')    # ctrl+c,复制
sleep(1)
el.send_keys(Keys.CONTROL + 'v')    # ctrl+v,粘贴
el.send_keys(Keys.CONTROL, 'v')     # + 和 , 同样效果
sleep(1)
el.send_keys(Keys.BACKSPACE)        # 退格健,删除文字

键盘不止上面的操作,Keys中均能组合使用。

模拟鼠标操作

1、行为控制

  • perform --- 执行所有准备好的Action
  • reset_actions --- 清空所有准备好的Action  #  该方法在 selenium 3.141.0版本不生效
  • pause --- 设置Action之间的动作时间间隔

2、鼠标操作

  • click --- 鼠标左键点击(可以指定或不指定元素对象)
  • click_and_hold --- 鼠标左键点击但不释放(可以指定或不指定元素对象)
  • release --- 释放鼠标点击动作(可以指定或不指定在目标元素对象上释放)
  • context_click --- 鼠标右键点击(可以指定或不指定元素对象)
  • double_click --- 鼠标左键双击(可以指定或不指定元素对象)
  • drag_and_drop --- 鼠标左键在两个元素之间拖拽
  • drag_and_drop_by_offset --- 鼠标左键拖拽元素到目标偏移位置
  • move_by_offset --- 鼠标移动指定偏移
  • move_to_element --- 鼠标移动到指定元素
  • move_to_element_with_offset --- 鼠标移动到指定元素的指定偏移位置

在使用ActionChains类下面的方法之前,需要先引入ActionChains类

from selenium.webdriver import ActionChains

需要注意的是在实例化ActionChains类对象时需要把webdriver的实例对象当参数传入。
ActionChains用于模拟用户的行为,所有的行为都存储在actionchains对象上,再通过perform()执行所有ActionChains中存储的行为。
perform()同样也是ActionChains类提供的方法,通常与ActionChains()配合使用。

3、键盘操作

key_down --- 键盘按下
key_up --- 键盘释放
send_keys --- 向当前元素发送模拟按键
send_keys_to_element --- 向指定元素发送模拟按键

鼠标操作综合练习

import time
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")

actionChains = ActionChains(driver)
time.sleep(2)


# 单击鼠标左键,
el = driver.find_element_by_xpath('//*[@id="u1"]/a')
actionChains.click(el).perform()
actionChains.reset_actions()    # reset_actions在selenium 3.141.0 版本不生效。预期清空保存在actionChains中的行为,但是实际没有清空。后面的操作都会重复执行前面加入的操作
time.sleep(2)
el = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__closeBtn"]')
actionChains.click(el).perform()
time.sleep(5)

# 双击鼠标左键
el = driver.find_element_by_xpath('//*[@id="hotsearch-refresh-btn"]')
actionChains.double_click(el).perform()
time.sleep(2)

# 鼠标悬浮
el = driver.find_element_by_xpath('//*[@id="s-usersetting-top"]')
actionChains.move_to_element(el).perform()
time.sleep(2)


# 单击鼠标右键
el = driver.find_element_by_id("kw")
actionChains.context_click(el).perform()
actionChains.release().perform()
time.sleep(2)

实际使用过程中,发现很多健模拟不了,比如F5,F12。

原文地址:https://www.cnblogs.com/testlearn/p/14379730.html