效果演示:
源码地址:
https://github.com/Z-MiCTrue/Auto_Stuendthttps://github.com/Z-MiCTrue/Auto_Stuendt
问题描述:
很多时候在学xi通里提交作业时会提示禁止粘贴,甚是麻烦:
于是写了这个脚本,直接将指定文本通过虚拟键盘输入答题框。以帮助大家高效学习。
程序流程:
从txt读取文本为字符串 -> 通过分词库jieba将中文字符串切分成词组列表 -> 通过拼音库xpinyin将词组转化为拼音 -> 通过pyautogui以及中文输入法依次将答案输入答题框
库依赖:
- pyautogui
- jieba
- xpinyin
源代码:
import sys
import time
import unicodedata
import pyautogui
import jieba
from xpinyin import Pinyin
# 倒数计时并打印
def countdown(total_time: int):
for t in range(total_time):
r = '\rcountdown: %ds [%s%s]' % ((total_time - t), '=' * (total_time - t), ' ' * t)
sys.stdout.write(r)
time.sleep(1)
sys.stdout.flush()
print('\nstart to work')
# 读取txt数据
def txt2str(filename):
with open(filename, 'r', encoding='utf-8') as cache_data_txt:
cache_data = cache_data_txt.read()
return cache_data
# 自动输入函数
def auto_key(words: str):
pinyin = Pinyin()
countdown(5) # 倒计时缓冲
words_list = ('#'.join(jieba.cut(words)).split('#')) # 将中文字符串切分成词组 list
for char in words_list:
if char not in list('(,。、:——;)'):
char = pinyin.get_pinyin(char, '') # 将词组转化为拼音
else:
char = unicodedata.normalize('NFKC', char) # 将标点转化为u英文
char = list(char)
for key_input in char:
pyautogui.keyDown(key_input) # 依次将拼音键入
time.sleep(0.1)
pyautogui.keyDown(' ') # 键入空格选定词组
print('finish')
if __name__ == '__main__':
all_words = txt2str('source.txt')
auto_key(all_words)
其它说明
1. 程序开始前有 5s 的缓冲时间,以确保运行时光标已处于要输入的文本框内;
2. 输入文本与源文本最终存在一定差异,而该差异取决于本地输入法的智能程度,同时分词库 jieba 的引入正是为了通过词组的输入尽可能提高转化成拼音后的唯一性。输入完成请对个别错误进行修改;
3. 请将需要输入的源文本粘贴进 source.txt 中,程序将从该文件读取文本并自动输入;
如果没有路,就用 Python 走出一条路!