python爬虫之selenium--键盘操作

前言

上篇文章说了selenium里的鼠标事件,在自动化中,键盘事件也是非常重要的,比如我们需要按回车键,ctrl+c复制等等操作,都离不开键盘事件,在selenium中,提供了Keys方法来供我们操作键盘

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()

通过WebDriver内建的模块模拟组合键

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)

python爬虫之selenium-介绍和安装

python爬虫之selenium-浏览器操作方法

python爬虫之selenium-元素的定位

python爬虫之selenium--Xpath定位

python爬虫之selenium--iframe

python爬虫之selenium--单选下拉列表

python爬虫之selenium--鼠标操作

python爬虫之selenium--键盘操作

python爬虫之selenium--等待的三种方式

python爬虫之selenium--多窗口操作

python爬虫之selenium--操作JS弹框

python爬虫之selenium--上传文件

python爬虫之selenium--浏览器窗口截图

python爬虫之selenium--加载浏览器配置

python爬虫之selenium--表格和复选框的定位

python爬虫之selenium--获取HTML源码断言和URL地址

python爬虫之selenium--设置浏览器的位置和高度宽度

python爬虫之selenium--页面元素相关的操作

python爬虫之selenium--浏览器滚动条操作

python爬虫之selenium--拖拽页面元素

python爬虫之selenium--页面元素是否可见和可操作

python爬虫之selenium--高亮显示正在操作的元素

python爬虫之selenium--更改标签的属性值

python爬虫之selenium--单选框和复选框的操作

python爬虫之selenium--cookie操作

python爬虫之selenium--记录日志信息

转自:https://www.cnblogs.com/zouzou-busy/p/11117719.html