模拟键盘键盘和鼠标操作主要使用到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。

Selenium_模拟键盘和鼠标操作(9)的更多相关文章

  1. WPF 中模拟键盘和鼠标操作

    转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...

  2. .net中模拟键盘和鼠标操作

    原文:.net中模拟键盘和鼠标操作 周银辉 其实SendKeys类提供的方法蛮好用的,可惜的是WPF中不能用了,说是WPF的消息循环方式改成了Dispatcher,所以直接调用System.Windo ...

  3. Blender 工具使用——显示键盘和鼠标操作

    Blender 工具使用--显示键盘和鼠标操作 Blender自己本身就带有显示按键和鼠标的功能,就是3D View: Screencast Keys插件. 打开 File(文件) -> Use ...

  4. C#获取键盘和鼠标操作的时间的类

    /// /// 创建结构体用于返回捕获时间 /// [StructLayout(LayoutKind.Sequential)] struct LASTINPUTINFO { /// /// 设置结构体 ...

  5. AJAX实现类似百度的搜索提示,自动补全和键盘、鼠标操作

    <script type="text/javascript"> $(document).ready(function(){ var highlightIndex = - ...

  6. selenium学习-模拟键盘按键操作

    导入  from selenium.webdriver.common.keys import Keys  格式:Keys.XXX 一般这么用:send_keys(Keys.XXX) # coding= ...

  7. C#键盘钩子 鼠标钩子

    最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...

  8. 用Delphi模拟键盘输入

    在Windows大行其道的今天,windows界面程序受到广大用户的欢迎.对这些程序的操作不外乎两种,键盘输入控制和鼠标输入控制.有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替手工输入, ...

  9. 远程控制篇:用Delphi模拟键盘输入/鼠标点击

    模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数. Keybd_event函数能触发一个按键事件,也就是会产生一个WM_KEYDOWN或WM_KEYUP消息 ...

随机推荐

  1. Next_day()函数的用法

    一.定义 NEXT_DAY(date,char)  date参数为日期型,  char:为1~7或Monday/Mon~Sunday/    指定时间的下一个星期几(由char指定)所在的日期,  c ...

  2. request.getRequestDispatcher()和response.sendRedirect()区别

    一.request.getRequestDispatcher().forward(request,response): 1.属于转发,也是服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标 ...

  3. Django auth

    auth是django一个自带的用户验证系统,使用它可以减少我们的开发流程. 基本使用 大体流程: 自定义类 from django.contrib.auth.models import Abstra ...

  4. 两大js移动端调试神器 / 调试工具分享 !

    分享大家一个CDN网站:https://www.bootcdn.cn/ eruda 移动端网页调试工具的使用: <script src="https://cdn.bootcdn.net ...

  5. 果蝇优化算法_Fruit Fly Optimization

    1. 果蝇优化算法背景 在夏天,果蝇是一种随处可见的昆虫.果蝇在嗅觉和视觉特别突出.腐烂的食物发出一种刺鼻的味道,温度越高这种气味的扩散速度较快,果蝇对这种味道非常敏感.腐烂的味道和食物的位置有关.一 ...

  6. Vs code配置Go语言环境-Mac

    背景:最近受朋友介绍,学习Go语言.那么开始吧,首先从配置环境开始. 电脑:Mac Air,Vs code已经安装 一.Go下载和安装 下载地址:https://golang.google.cn/dl ...

  7. java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多

    java nio 写一个完整的http服务器  支持文件上传   chunk传输    gzip 压缩      也仿照着 netty处理了NIO的空轮询BUG        本项目并不复杂 代码不多 ...

  8. LuoguB2102 计算鞍点 题解

    Content 给定一个 \(5\times 5\) 的矩阵,请在这个矩阵中找出一个元素,使得这个元素既是它所在行的最大值,也是它所在列的最小值. Solution 如果直接暴力枚举每一个元素,再去算 ...

  9. Data truncation: Truncated incorrect DOUBLE value错误的解决方案

    Data truncation: Truncated incorrect DOUBLE value错误的解决方案: 当在修改某条单位记录时,发生了Data truncation: Truncated ...

  10. libevent源码学习(10):min_heap数据结构解析

    min_heap类型定义min_heap函数构造/析构函数及初始化判断event是否在堆顶判断两个event之间超时结构体的大小关系判断堆是否为空及堆大小返回堆顶event分配堆空间堆元素的上浮堆元素 ...