之前在做自动化测试中需要用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)