上篇文章说了selenium里的鼠标事件,在自动化中,键盘事件也是非常重要的,比如我们需要按回车键,ctrl+c复制等等操作,都离不开键盘事件,在selenium中,提供了Keys方法来供我们操作键盘
使用键盘完成复制,剪切,粘贴的功能
# 在百度搜索框输入 python ,复制粘贴搜狗输入框进行搜索 from selenium import webdriver from selenium.webdriver.common.keys import Keys from time import sleep driver = webdriver.Chrome() driver.get(‘http://www.baidu.com‘) driver.maximize_window() driver.find_element_by_css_selector(‘#kw‘).send_keys(‘python‘) sleep(2) driver.find_element_by_css_selector(‘#kw‘).send_keys(Keys.CONTROL, ‘a‘) # 全选 driver.find_element_by_css_selector(‘#kw‘).send_keys(Keys.CONTROL, ‘c‘) # 复制 driver.find_element_by_css_selector(‘#kw‘).send_keys(Keys.CONTROL, ‘x‘) # 剪切 sleep(2) driver.get(‘http://www.sogou.com‘) driver.find_element_by_css_selector(‘.sec-input‘).send_keys(Keys.CONTROL, ‘v‘) # 粘贴 sleep(2) driver.find_element_by_css_selector(‘#stb‘).click() sleep(2) driver.quit()
常用的按键
 
NULL = ‘\ue000‘ CANCEL = ‘\ue001‘ # ^break HELP = ‘\ue002‘ BACKSPACE = ‘\ue003‘ BACK_SPACE = BACKSPACE #删除键 TAB = ‘\ue004‘ #TAB键 CLEAR = ‘\ue005‘ RETURN = ‘\ue006‘ ENTER = ‘\ue007‘ #回车键 SHIFT = ‘\ue008‘ #Shift键 LEFT_SHIFT = SHIFT CONTROL = ‘\ue009‘ LEFT_CONTROL = CONTROL #Ctrl 键 ALT = ‘\ue00a‘ #Alt 键 LEFT_ALT = ALT PAUSE = ‘\ue00b‘ ESCAPE = ‘\ue00c‘ #ECS键 SPACE = ‘\ue00d‘ #空格键 PAGE_UP = ‘\ue00e‘ #PgUp 键 PAGE_DOWN = ‘\ue00f‘ #PgDwon 键 END = ‘\ue010‘ #END 键 HOME = ‘\ue011‘ #HOME 键 LEFT = ‘\ue012‘ #左键 ARROW_LEFT = LEFT UP = ‘\ue013‘ #上键 ARROW_UP = UP RIGHT = ‘\ue014‘ ARROW_RIGHT = RIGHT #右键 DOWN = ‘\ue015‘ #下键 ARROW_DOWN = DOWN INSERT = ‘\ue016‘ #insert键 DELETE = ‘\ue017‘ #del键 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‘
例子2
from selenium import webdriver import unittest, time from selenium.webdriver.common.keys import Keys class Test_dragpage(unittest.TestCase): def test_dragpageElement(self): url = ‘http://www.sogou.com‘ self.driver = webdriver.Chrome() self.driver.get(url) self.driver.maximize_window() query = self.driver.find_element_by_id(‘query‘) # 通过WebDriver发送一个f12键 query.send_keys(Keys.F12) time.sleep(5) # 在按次f12 query.send_keys(Keys.F12) query.send_keys(‘selenium‘) # 按回车 query.send_keys(Keys.ENTER) time.sleep(3) test1 = Test_dragpage() test1.test_dragpageElement()
from selenium import webdriver import unittest, time from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys class Test_dragpage(unittest.TestCase): def test_dragpageElement(self): url = ‘http://www.baidu.com‘ self.driver = webdriver.Chrome() self.driver.get(url) input = self.driver.find_element_by_id(‘kw‘) input.send_keys(‘python‘) ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘a‘).key_up(Keys.CONTROL).perform() time.sleep(2) ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘x‘).key_up(Keys.CONTROL).perform() self.driver.get(url) self.driver.find_element_by_id(‘kw‘).click() ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘v‘).key_up(Keys.CONTROL).perform() self.driver.find_element_by_id(‘su‘).click() test1 = Test_dragpage() test1.test_dragpageElement()
ActionChains(self.driver).key_down(Keys.CONTROL).send_keys(‘v‘).key_up(Keys.CONTROL).perform(),这行代码中,key_down(Keys.CONTROL)表示按下ctrl键,send_keys(‘v‘)类似模拟了V键,组合起来就是Ctrl+v,而key_down(Keys.CONTROL)表示释放Ctrl键
需要安装pywin32
键盘映射表
 
VK_CODE = {‘backspace‘:0x08,
           ‘tab‘:0x09,
           ‘clear‘:0x0C,
           ‘enter‘:0x0D,
           ‘shift‘:0x10,
           ‘ctrl‘:0x11,
           ‘alt‘:0x12,
           ‘pause‘:0x13,
           ‘caps_lock‘:0x14,
           ‘esc‘:0x1B,
           ‘spacebar‘:0x20,
           ‘page_up‘:0x21,
           ‘page_down‘:0x22,
           ‘end‘:0x23,
           ‘home‘:0x24,
           ‘left_arrow‘:0x25,
           ‘up_arrow‘:0x26,
           ‘right_arrow‘:0x27,
           ‘down_arrow‘:0x28,
           ‘select‘:0x29,
           ‘print‘:0x2A,
           ‘execute‘:0x2B,
           ‘print_screen‘:0x2C,
           ‘ins‘:0x2D,
           ‘del‘:0x2E,
           ‘help‘:0x2F,
           ‘0‘:0x30,
           ‘1‘:0x31,
           ‘2‘:0x32,
           ‘3‘:0x33,
           ‘4‘:0x34,
           ‘5‘:0x35,
           ‘6‘:0x36,
           ‘7‘:0x37,
           ‘8‘:0x38,
           ‘9‘:0x39,
           ‘a‘:0x41,
           ‘b‘:0x42,
           ‘c‘:0x43,
           ‘d‘:0x44,
           ‘e‘:0x45,
           ‘f‘:0x46,
           ‘g‘:0x47,
           ‘h‘:0x48,
           ‘i‘:0x49,
           ‘j‘:0x4A,
           ‘k‘:0x4B,
           ‘l‘:0x4C,
           ‘m‘:0x4D,
           ‘n‘:0x4E,
           ‘o‘:0x4F,
           ‘p‘:0x50,
           ‘q‘:0x51,
           ‘r‘:0x52,
           ‘s‘:0x53,
           ‘t‘:0x54,
           ‘u‘:0x55,
           ‘v‘:0x56,
           ‘w‘:0x57,
           ‘x‘:0x58,
           ‘y‘:0x59,
           ‘z‘:0x5A,
           ‘numpad_0‘:0x60,
           ‘numpad_1‘:0x61,
           ‘numpad_2‘:0x62,
           ‘numpad_3‘:0x63,
           ‘numpad_4‘:0x64,
           ‘numpad_5‘:0x65,
           ‘numpad_6‘:0x66,
           ‘numpad_7‘:0x67,
           ‘numpad_8‘:0x68,
           ‘numpad_9‘:0x69,
           ‘multiply_key‘:0x6A,
           ‘add_key‘:0x6B,
           ‘separator_key‘:0x6C,
           ‘subtract_key‘:0x6D,
           ‘decimal_key‘:0x6E,
           ‘divide_key‘:0x6F,
           ‘F1‘:0x70,
           ‘F2‘:0x71,
           ‘F3‘:0x72,
           ‘F4‘:0x73,
           ‘F5‘:0x74,
           ‘F6‘:0x75,
           ‘F7‘:0x76,
           ‘F8‘:0x77,
           ‘F9‘:0x78,
           ‘F10‘:0x79,
           ‘F11‘:0x7A,
           ‘F12‘:0x7B,
           ‘F13‘:0x7C,
           ‘F14‘:0x7D,
           ‘F15‘:0x7E,
           ‘F16‘:0x7F,
           ‘F17‘:0x80,
           ‘F18‘:0x81,
           ‘F19‘:0x82,
           ‘F20‘:0x83,
           ‘F21‘:0x84,
           ‘F22‘:0x85,
           ‘F23‘:0x86,
           ‘F24‘:0x87,
           ‘num_lock‘:0x90,
           ‘scroll_lock‘:0x91,
           ‘left_shift‘:0xA0,
           ‘right_shift ‘:0xA1,
           ‘left_control‘:0xA2,
           ‘right_control‘:0xA3,
           ‘left_menu‘:0xA4,
           ‘right_menu‘:0xA5,
           ‘browser_back‘:0xA6,
           ‘browser_forward‘:0xA7,
           ‘browser_refresh‘:0xA8,
           ‘browser_stop‘:0xA9,
           ‘browser_search‘:0xAA,
           ‘browser_favorites‘:0xAB,
           ‘browser_start_and_home‘:0xAC,
           ‘volume_mute‘:0xAD,
           ‘volume_Down‘:0xAE,
           ‘volume_up‘:0xAF,
           ‘next_track‘:0xB0,
           ‘previous_track‘:0xB1,
           ‘stop_media‘:0xB2,
           ‘play/pause_media‘:0xB3,
           ‘start_mail‘:0xB4,
           ‘select_media‘:0xB5,
           ‘start_application_1‘:0xB6,
           ‘start_application_2‘:0xB7,
           ‘attn_key‘:0xF6,
           ‘crsel_key‘:0xF7,
           ‘exsel_key‘:0xF8,
           ‘play_key‘:0xFA,
           ‘zoom_key‘:0xFB,
           ‘clear_key‘:0xFE,
           ‘+‘:0xBB,
           ‘,‘:0xBC,
           ‘-‘:0xBD,
           ‘.‘:0xBE,
           ‘/‘:0xBF,
           ‘`‘:0xC0,
           ‘;‘:0xBA,
           ‘[‘:0xDB,
           ‘\\‘:0xDC,
           ‘]‘:0xDD,
           "‘":0xDE,
           ‘`‘:0xC0}
import win32api import win32con class KeyboardKeys(object): #模拟键盘按键类 VK_CODE={ ‘enter‘:0x0D, ‘ctrl‘:0x11, ‘v‘:0x56 } @staticmethod def keyDown(keyName): #按下按键 win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,0,0) @staticmethod def keyUp(keyName): #释放按键 win32api.keybd_event(KeyboardKeys.VK_CODE[keyName],0,win32con.KEYEVENTF_KEYUP,0) @staticmethod def oneKey(key): #模拟单个按键 KeyboardKeys.keyDown(key) KeyboardKeys.keyUp(key) @staticmethod def twoKeys(key1,key2): #模拟两个组合键 KeyboardKeys.keyDown(key1) KeyboardKeys.keyDown(key2) KeyboardKeys.keyUp(key2) KeyboardKeys.keyUp(key1)
 
Keybd_event()共有四个参数:
   第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);
   第二个参数为扫描码,一般不用设置,用0代替就行;
   第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";
   第四个参数一般也是置0即可。
KeyboardKeys.oneKey(‘enter‘)
在进行自动化的时候,有时候要上传一个文件,这时会打开一个wins的窗口,但是selenium没有给我们提供操作wins窗口的方法,我们就要使用pywin32提供给我们的方法来操作
import win32clipboard as w import win32con class Clipboard(object): #模拟windows设置剪贴板 #读取剪贴板 @staticmethod def getText(): #打开剪贴板 w.OpenClipboard() #获取剪贴板中的数据 d=w.GetClipboardData(win32con.CF_TEXT) #关闭剪贴板 w.CloseClipboard() #返回剪贴板数据给调用者 return d #设置剪贴板内容 @staticmethod def setText(aString): #打开剪贴板 w.OpenClipboard() #清空剪贴板 w.EmptyClipboard() #将数据aString写入剪贴板 w.SetClipboardData(win32con.CF_UNICODETEXT,aString) #关闭剪贴板 w.CloseClipboard()
调用
Clipboard.setText(filePath)
原文:https://www.cnblogs.com/zouzou-busy/p/11117719.html