模拟键盘键盘和鼠标操作主要使用到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. C++易错小结

    C++ 11 vector 遍历方法小结 方法零,对C念念不舍的童鞋们习惯的写法: void ShowVec(const vector<int>& valList) { int c ...

  2. ssm+mysql+jsp打造在线考试系统WeKnow-学生端

    一.登陆模块 前台提交账号和密码传到后台处理控制层 1.1 首先是控制器 @RequestMapping(value="/studentLogin", method=Request ...

  3. 基于Github Actions + Docker + Git 的devops方案实践教程

    目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...

  4. 用 WinUI 3 开发了一个摸鱼应用

    1. 开发了一个摸鱼 App 我做了一个简单的 App:摸鱼. 如上图所示,这个 App 就只有一个按钮,点击后假装开始 Windows Update,然后用户就可以光明正大地摸鱼了. 不要小看摸鱼, ...

  5. css预处理器和css Modules是干嘛的?

    CSS预处理器 1.css和js的区别 js是编程语言,它可以声明变量,编写逻辑.而css实际上只是个"表",表头是选择器,内容是里面的样式.它并不能写逻辑啥的.也就是说,对于cs ...

  6. [BUUCTF]PWN——mrctf2020_shellcode

    mrctf2020_shellcode 附件 步骤: 例行检查,64位程序,开启了relro和pie,没有nx,肯定是用shellcode最方便了 本地试运行一下,看看大概的情况 64位ida载入,根 ...

  7. 2020腾讯犀牛鸟网络安全T-Star高校挑战赛writeup

    签到 浏览器禁用js,在www目录下有 key 命令执行基础 使用 | 可以执行其他命令,在 ../目录下有 key.php cat 一下读出来 你能爆破吗 一开始随便输了个账号的时候不是这个页面,抓 ...

  8. CSS选择器类型总结

    CSS选择器类型总结 1.通用选择器 一般用于给所有元素做一些通用性的样式设置,比如清除内边距.外边距等.但是效率比较低,尽量不要使用. * { margin: 0; padding: 0; } 2. ...

  9. LuoguP2382 化学分子式 题解

    Description 你的任务是编写一个能处理在虚拟的化学里分子式的程序,具体地说,给定你所有原子的相对原子质量,求出所有询问的分子的相对分子质量,或者报告不存在. 数据范围:原子质量 \(\leq ...

  10. java 输入输出IO流 字符流 FileWriter FileReader

    为什么要使用字符流 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为单位读写 ...