win32api.keybd_event
該函數原型:keybd_event(bVk, bScan, dwFlags, dwExtraInfo)
第一個參數:虛擬鍵碼(鍵盤鍵碼對照表見附錄);
第二個參數:硬件掃描碼,一般設置為0即可;
第三個參數:函數操作的一個標志位,如果值為KEYEVENTF_EXTENDEDKEY則該鍵被按下,也可設置為0即可,如果值為KEYEVENTF_KEYUP則該按鍵被釋放;
第四個參數:定義與擊鍵相關的附加的32位值,一般設置為0即可。
例子:
import win32api import win32con win32api.keybd_event(13,0,0,0) # enter win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0) #釋放按鍵 # 按下ctrl+s win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x53, 0, 0, 0) win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # 按下回車 win32api.keybd_event(0x0D, 0, 0, 0) win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # 按下ctrl+W win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x57, 0, 0, 0) win32api.keybd_event(0x57, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) # 按下ctrl+a win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x41, 0, 0, 0) win32api.keybd_event(0x41, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # 按下ctrl+v win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x56, 0, 0, 0) win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1)
更多可參考:http://timgolden.me.uk/pywin32-docs/PyWin32.html
鍵盤鍵碼對照表:
| 按鍵 |
鍵碼 |
按鍵 |
鍵碼 |
按鍵 |
鍵碼 |
按鍵 |
鍵碼 |
| A |
65 |
6(數字鍵盤) |
102 |
; |
59 |
: |
58 |
| B |
66 |
7(數字鍵盤) |
103 |
= |
61 |
+ |
43 |
| C |
67 |
8(數字鍵盤) |
104 |
, |
44 |
< |
60 |
| D |
68 |
9(數字鍵盤) |
105 |
- |
45 |
_ |
95 |
| E |
69 |
* |
106 |
. |
46 |
> |
62 |
| F |
70 |
! |
33 |
/ |
47 |
? |
63 |
| G |
71 |
Enter |
13 |
` |
96 |
~ |
126 |
| H |
72 |
@ |
64 |
[ |
91 |
{ |
123 |
| I |
73 |
# |
35 |
\ |
92 |
| |
124 |
| J |
74 |
$ |
36 |
} |
125 |
] |
93 |
| K |
75 |
F1 |
112 |
a |
97 |
b |
98 |
| L |
76 |
F2 |
113 |
c |
99 |
d |
100 |
| M |
77 |
F3 |
114 |
e |
101 |
f |
102 |
| N |
78 |
F4 |
115 |
g |
103 |
h |
104 |
| O |
79 |
F5 |
116 |
i |
105 |
j |
106 |
| P |
80 |
F6 |
117 |
k |
107 |
l |
108 |
| Q |
81 |
F7 |
118 |
m |
109 |
n |
110 |
| R |
82 |
F8 |
119 |
o |
111 |
p |
112 |
| S |
83 |
F9 |
120 |
q |
113 |
r |
114 |
| T |
84 |
F10 |
121 |
s |
115 |
t |
116 |
| U |
85 |
F11 |
122 |
u |
117 |
v |
118 |
| V |
86 |
F12 |
123 |
w |
119 |
x |
120 |
| W |
87 |
Backspace |
8 |
y |
121 |
z |
122 |
| X |
88 |
Tab |
9 |
0(數字鍵盤) |
96 |
Up Arrow |
38 |
| Y |
89 |
Clear |
12 |
1(數字鍵盤) |
97 |
Right Arrow |
39 |
| Z |
90 |
Shift |
16 |
2(數字鍵盤) |
98 |
Down Arrow |
40 |
| 0(小鍵盤) |
48 |
Control |
17 |
3(數字鍵盤) |
99 |
Insert |
45 |
| 1(小鍵盤) |
49 |
Alt |
18 |
4(數字鍵盤) |
100 |
Delete |
46 |
| 2(小鍵盤) |
50 |
Cap Lock |
20 |
5(數字鍵盤) |
101 |
Num Lock |
144 |
| 3(小鍵盤) |
51 |
Esc |
27 |
2(數字鍵盤) |
98 |
Down Arrow |
40 |
| 4(小鍵盤) |
52 |
Spacebar |
32 |
3(數字鍵盤) |
99 |
Insert |
45 |
| 5(小鍵盤) |
53 |
Page Up |
33 |
4(數字鍵盤) |
100 |
Delete |
46 |
| 6(小鍵盤) |
54 |
Page Down |
34 |
5(數字鍵盤) |
101 |
Num Lock |
144 |
| 7(小鍵盤) |
55 |
End |
35 |
||||
| 8(小鍵盤) |
56 |
Home |
36 |
||||
| 9(小鍵盤) |
57 |
Left Arrow |
37 |
||||
# coding=utf-8 from selenium import webdriver import win32api import win32con import win32clipboard from ctypes import * import time# 瀏覽器打開百度網頁 browser = webdriver.Chrome() browser.maximize_window() browser.get("https://www.baidu.com/") time.sleep(2)# 獲取頁面title作為文件名 title = browser.title # 設置路徑為:當前項目的絕對路徑+文件名 path = (os.path.dirname(os.path.realpath(__file__)) + "\\" + title + ".html") # 將路徑復制到剪切板 win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() win32clipboard.SetClipboardText(path) win32clipboard.CloseClipboard() # 按下ctrl+s win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x53, 0, 0, 0) win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # 鼠標定位輸入框並點擊 windll.user32.SetCursorPos(700, 510) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) time.sleep(1) # 按下ctrl+a win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x41, 0, 0, 0) win32api.keybd_event(0x41, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # 按下ctrl+v win32api.keybd_event(0x11, 0, 0, 0) win32api.keybd_event(0x56, 0, 0, 0) win32api.keybd_event(0x56, 0, win32con.KEYEVENTF_KEYUP, 0) win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) time.sleep(1) # 按下回車 win32api.keybd_event(0x0D, 0, 0, 0) win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0) browser.close() 有個小問題...鼠標定位 windll.user32.SetCursorPos(700, 510)
