python实现自动敲代码

前言

一、安装

1.安装用到的第三方库

2.安装Everything

二、搜索本地文件

三、模拟键盘输入

总结


前言

前几天公司给每台电脑都装了个监控软件,每3分钟截一张图上传后台,真的是太过分了,

这还让我怎么摸鱼?!那我们反其道而行之,让他们看到我们认真工作的样子。

实现思路:随机读取一个本地文件,创建一个新文件用文本编辑器打开,控制键盘输入文件内容,实现24小时全天候敲代码,工作效率拉满。

先放一张动图.gif

 理论存在,实践开始。


一、安装

1.安装用到的第三方库

pip install pyautogui
pip install requests

2.安装Everything

搜索本地文件自己遍历效率太慢,我这里用了everything提供的http服务器

开启http服务器方法:打开一个everything界面→工具→选项,启用HTTP服务器,端口随便填一个没被占用的就好。

 这样我们就可以在本地访问到这样的一个网址。


二、搜索本地文件

首先是要搜索到本地文件,everything的http服务器给我们提供了接口

def search(search='', offset=0, count=30, path=1, regex=1, sort='name'):
    params = {
        'search': search,  # 搜索文本
        'offset': offset,
        'count': count,
        'json': '1',
        'case': '0',  # 数值非零时匹配大小写
        'wholeword': '0',  # 数值非零时匹配全字
        'path': path,  # 数值非零时搜索完整路径
        'regex': regex,  # 数值非零时执行正则搜索
        'diacritics': '0',  # 数值非零时匹配变音标记
        'path_column': '1',  # 数值非零时列举结果路径为 json 对象
        'size_column': '1',  # 数值非零时列举结果大小为 json 对象
        'date_modified_column': '1',  # 数值非零时列举结果修改日期为 json 对象
        'date_created_column': '0',  # 数值非零时列举结果创建日期为 json 对象
        'attributes_column': '0',  # 数值非零时列举结果属性为 json 对象
        'sort': sort,  # name,path,date_modified,size
        'ascending': '0',  # 数值非零时升序排列
    }

    r = requests.get('http://localhost:8888/', params=params, timeout=8)
    ret_data = r.json()
    total = ret_data['totalResults']
    results = ret_data['results']

    return results

接口有很多参数,主要用到search(关键词)、count(数量)、regex(开启正则)、json(返回json结果)。

 这里放一份官方文档,里面有完整的参数解释:Everything - HTTP

比如我们要搜索D盘下js、css、html文件,取1000个返回结果

search(search='^D:\\\\.*?\.(js|css|html)$',count=1000)

返回结果有我们需要的文件名称、文件路径还有文件大小。

三、模拟键盘输入

python模拟键盘输入的库有好几个,这里用的是pyautogui,下面是几个用到的api

pyautogui.typewrite('Hello world!') # 输入Hello world!字符串
pyautogui.typewrite('Hello world!', interval=0.25) # 每次输入间隔0.25秒,输入Hello world!
pyautogui.press('enter') # 按下并松开(轻敲)回车键
pyautogui.press(['left', 'left', 'left', 'left']) # 按下并松开(轻敲)四下左方向键
pyautogui.keyDown('shift') # 按下`shift`键
pyautogui.keyUp('shift') # 松开`shift`键
pyautogui.hotkey('ctrl', 'v') # 组合按键(Ctrl+V),粘贴功能,按下并松开'ctrl'和'v'按键
# 常用输入
pyautogui.KEYBOARD_KEYS = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.',
              '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@',
              '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
              'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
              'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback',
              'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch',
              'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal',
              'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
              'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22',
              'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul',
              'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2',
              'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
              'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9',
              'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print',
              'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select',
              'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
              'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command',
              'option', 'optionleft', 'optionright']

首先从1000个文件中随机选一个读取,创建一个新文件,并用文本编辑器打开它。

打开文件后获取到文本编辑器的窗口句柄,以便后面切换窗口时暂停输入。

# 读取一个随机文件
def get_random_file(file_list):
    random_index = random.randint(0, len(file_list))
    random_file = file_list[random_index]
    file_path = Path(random_file['path']) / random_file['name']
    random_file['file_path'] = file_path
    return random_file

# 在autoCode文件夹下创建一个新文件
edit_file_path = Path(f'./autoCode/{file_name}')
code = os.system(f'type nul>{edit_file_path}')
if code != 0:
    return False

# 用文本编辑器打开文件
# notepad++ 打开
code = os.system('start notepad++ ' + './autoCode/' + file_name)
# vscode 打开
code = os.system(f'code {edit_file_path}')
if code != 0:
    return False

# 获取当前窗口句柄,窗口名
cur_hwnd = win32gui.GetForegroundWindow()
cur_cls_name = win32gui.GetClassName(cur_hwnd)
# 判断当前窗口是否是文本编辑器的方法,把上面获取到的窗口句柄,窗口名传入
def is_pause_or_close(hwnd, class_name):
    _hwnd = win32gui.FindWindow(class_name, None)
    # 0代表这个没有获取到这个窗口
    if _hwnd == 0:
        return -1
    _cur_hwnd = win32gui.GetForegroundWindow()
    if _cur_hwnd != hwnd:
        return 1
    return 0

接下来就是循环随机文件的内容,模拟键盘输入

for char in content:
    # 判断是否切换或关闭窗口
    status = is_pause_or_close(cur_hwnd, cur_cls_name)
    if status == 1:
        time.sleep(2)
        continue
    elif status == -1:
        sys.exit(0)
    
    # 判断是否是中文,pyautogui没办法输入中文
    if is_zh(char):
        continue
    if char == '\n':
        enter_begin = True
        pyautogui.press('enter')
        continue
    if enter_begin and char == ' ':
        continue
    enter_begin = False

    pyautogui.press(char)
    time.sleep(random_sleep_time())

# 判断是否是中文的方法
unicode_min = int(u'4E00', 16)
unicode_max = int(u'9FFF', 16)
def is_zh(char):
    return unicode_min <= ord(char) <= unicode_max

总结

到这里全自动代码机就实现了,快去让你的代码自己动起来吧。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头套猴侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值