【Python】实现 Gui 界面自动输入

文章目录
  1. 1. 使用 python 实现 Gui 自动登录
    1. 1.1. 需求
    2. 1.2. 思路
      1. 1.2.1. 构建输入队列
      2. 1.2.2. 遍历输入队列
      3. 1.2.3. 完整代码
  2. 2. web网站使用油猴脚本实现自动登录

开发过程中使用后台时,每次都需要输入用户名和密码,很麻烦,尝试解决这个麻烦的过程中使用了 pyautogui 这个库,整理记录一下,实际登录web网站时,自动输入还有别的方法,可以使用油猴脚本实现,详见文末使用油猴自动登录网站

[toc]

使用 python 实现 Gui 自动登录

需求

界面主动输入 admin 后跳转到密码栏再自动输入 Admin@2022

思路

主要是使用 pyautogui 库, pyautogui封装了界面的相关操作,包括鼠标和键盘事件。

源码

  1. pyautogui.typewrite 可以模拟输入字符的输入
  2. pyautogui.press 可以模拟其他操作类型的键的输入

基于以上两点,我们只需要构建一个输入的队列,然后遍历队列执行响应的操作即可

构建输入队列

队列的键值的键值如下所示,先输入需要录入的单词,紧接着执行对应的操作即可:

1
2
3
4
5
6
7
8
9
10
11
# {pyautogui.typewrite, pyautogui.press}

tac = {
'admin':'tab',
'Admin@2022':'enter'
}

wiki = {
'admin':'tab',
'Admin@2022':'enter'
}

遍历输入队列

1
2
3
4
for key in tac:
print(key, ":", tac[key])
pyautogui.typewrite(key, interval=interval)
pyautogui.press(tac[key], interval=interval)

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
"""
python -m PyInstaller -F -w -n auto_input ./auto_input.py
"""
import pathlib
import pyautogui

# 控制速度
interval = 0.05

tac = {
'admin':'tab',
'Admin@2022':'enter'
}

wiki = {
'admin':'tab',
'Admin@2022':'enter'
}

text_alert = """开始前请确保完成以下操作
1. 请切换为英文输入法
2. 请打开输入界面
3. 将光标放至开始输入的位置
4. 选择要输入的代码
"""

def main():
global codes
option = pyautogui.confirm(text=text_alert, title='自动输入小工具', buttons=['tac','wiki'])
if option == 'tac':
for key in tac:
print(key, ":", tac[key])
pyautogui.typewrite(key, interval=interval)
pyautogui.press(tac[key], interval=interval)
elif option == 'wiki':
for key in tac:
print(key, ":", wiki[key])
pyautogui.typewrite(key, interval=interval)
pyautogui.press(wiki[key], interval=interval)


if __name__ == '__main__':
main()


web网站使用油猴脚本实现自动登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// ==UserScript==
// @name 零信任TAC一键登录
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author BladeHiker
// @match https://*/admin/*
// @match https://*/tap/admin/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=57.171
// @grant none
// ==/UserScript==

(function() {
'use strict';
window.onload = () =>
{
setInterval(()=>{
if(window.location.pathname=='/admin/login'){
setTimeout(()=>{
document.getElementsByName("username")[0].value = 'admin';
document.getElementsByName("password")[0].value = 'Admin@2022';
document.getElementsByName("username")[0].dispatchEvent(new InputEvent("input"))
document.getElementsByName("password")[0].dispatchEvent(new InputEvent("input"))
document.getElementsByTagName("button")[0].click()
},200)
}
else if(window.location.pathname=='/tap/admin/dist/login'){
setTimeout(()=>{
document.getElementsByName("username")[0].value = 'admin';
document.getElementsByName("password")[0].value = 'admin@1234';
document.getElementsByName("username")[0].dispatchEvent(new InputEvent("input"))
document.getElementsByName("password")[0].dispatchEvent(new InputEvent("input"))
document.getElementsByTagName("button")[0].click()
},200)

}},1000)
}
// Your code here...
})();