之前在做自动化测试中需要用Python在linux中模拟Ctrl+V 进行路径粘贴,试了很多种方法,起初用了xerox和pyperclip这两个python库,但打开对话框后调用粘贴API无法进行粘贴,不知道为什么。
然后发现了virtkey这个库,这个库可以在linux 中模拟键盘按键,但网上资料甚少。这个库主要有两个API
1、press_keysym/release_keysym
2、press_unicode/release_unicode
第一个接受keysym作为参数,第二个接受键盘的unicode,键盘unicode用来模拟字母键还是很方便的,但要模拟Ctrl这样的键一直没找到方法,最终找到了一个关于keysym的表,解决了问题,表如下
.keysym | .keycode | .keysym_num | Key |
Alt_L | 64 | 65513 | 左手边的Alt键 |
Alt_R | 113 | 65514 | 右手边的Alt键 |
BackSpace | 22 | 65288 | BackSpace |
Cancel | 110 | 65387 | Pause Break |
Caps_Lock | 66 | 65549 | CapsLock |
Control_L | 37 | 65507 | 左手边的Control键 |
Control_R | 109 | 65508 | 右手边的Control键 |
Delete | 107 | 65535 | Delete |
Down | 104 | 65364 | 方向键:下 |
End | 103 | 65367 | End |
Escape | 9 | 65307 | Esc |
Execute | 111 | 65378 | 系统调用 |
F1 | 67 | 65470 | F1 |
F2 | 68 | 65471 | F2 |
Fi | 66+i | 65469+i | Fi |
F12 | 96 | 68481 | F12 |
Home | 97 | 65360 | Home |
Insert | 106 | 65379 | Insert |
Left | 100 | 65361 | 方向键:左 |
Linefeed | 54 | 106 | Linefeed(Ctrl-j) |
KP_0 | 90 | 65438 | 数字键:0 |
KP_1 | 87 | 65436 | 数字键:1 |
KP_2 | 88 | 65433 | 数字键:2 |
KP_3 | 89 | 65435 | 数字键:3 |
KP_4 | 83 | 65430 | 数字键:4 |
KP_5 | 84 | 65437 | 数字键:5 |
KP_6 | 85 | 65432 | 数字键:6 |
KP_7 | 79 | 65429 | 数字键:7 |
KP_8 | 80 | 65431 | 数字键:8 |
KP_9 | 81 | 65434 | 数字键:9 |
KP_Add | 86 | 65451 | 运算键:+ |
KP_Begin | 84 | 65437 | 小键盘:5号键 |
KP_Decimal | 91 | 65439 | “.”键 |
KP_Delete | 91 | 65439 | Delete |
KP_Divide | 112 | 65455 | “/”键 |
KP_Down | 88 | 65433 | 方向键:下 |
KP_End | 87 | 65436 | End |
KP_Enter | 108 | 65421 | Enter |
KP_Home | 79 | 65429 | Home |
KP_Insert | 90 | 65438 | Insert |
KP_Left | 83 | 65430 | 方向键:左 |
KP_Multiply | 63 | 65450 | 运算键:* |
KP_Next | 89 | 65435 | PageDown |
KP_Prior | 81 | 65434 | PageUp |
KP_Right | 85 | 65432 | 方向键:右 |
KP_Subtract | 82 | 65453 | “-”键 |
KP_Up | 80 | 65431 | 方向键:上 |
Next | 105 | 65366 | PageDown |
Num_Lock | 77 | 65407 | NumLock |
Pause | 110 | 65299 | Pause |
| 111 | 65377 | PrintScreen |
Prior | 99 | 65365 | PageUp |
Return | 36 | 65293 | 回车键 |
Right | 102 | 65363 | 方向键:右 |
Scroll_Lock | 78 | 65300 | ScrollLock |
Shift_L | 50 | 65505 | 左手边的Shift键 |
Shift_R | 62 | 65506 | 有手边的Shift键 |
Tab | 23 | 65289 | Tab |
Up | 98 | 65362 | 方向键:上 |
至此,我们可以写出模拟Ctrl+V的代码
import virtkey
import time
v = virtkey.virtkey()
v.press_keysym(65507) #Ctrl键位
v.press_unicode(ord('v')) #模拟字母V
v.release_unicode(ord('v'))
v.release_keysym(65507)
time.sleep(5)
v.press_keysym(65421) #Enter
v.release_keysym(65421)