无聊的小东西——自动输入(Python、PyQt5)


文章目录

  • 无聊的小东西——自动输入(Python、PyQt5)
  • 前言
  • 一、问题展示
  • 二、开始胡说八道
  • 三、你以为结束了嘛?
    • 在这里插入图片描述 好了,去摸鱼吧!
  • 总结

前言

本文重点解决pyautogui.typewrite在OJ系统等在线编译系统(或者日常在PyCharm,VScode…等编译器)进行自动输入代码时,产生的缩进问题。以及初接触PyQt5就想上手的小案例。


一、问题展示

自动输入的反面教材

那么为什么会出现这种情况呢?pyautogui.typewrite()明明只是用于将字符串参数进行键盘输入。csv文件里是几个空格,就输出几个空格才对啊?
原因是因为,我们希望在自动输入到编译器中,但是像pycharm这类编译器,自带冒号:后换行缩进一个tab键的长度。

那么问题就简化成了我们只需要把原数据中所有的tab去掉就可以了,让编译器自己进行缩进。(也就是把图中每一行的第二个tab删掉)

二、开始胡说八道

现在我们把问题拆解,简化一下,只关心缩进部分的改良。

import pyautogui
import time
import pandas as pd
b = pd.read_csv(r"C:\Users\HP\Desktop\python_test.csv", encoding='utf-8',header=None)
e = b.iloc[12, 1]
time.sleep(3)
for l in e.split("\n"):l = l.lstrip() + "\n"pyautogui.typewrite(l)

我的python_test文件是一个两列多行,第0列是题目,第1列是答案,因为此处我对文件第一行做了一点处理:header=None,使得第一行不作为列名使用,所以题目的序号应该往前推一个,所以13题的答案是b.iloc[12,1]
time.sleep(3) 因为后面运行pyautogui.typewrite时是即刻成效的,防止还未确定输入的位置程序就开始运行。这里留了三秒让我们的鼠标快速移动到要打字的地方。
for l in e.split(“\n”) 我们将获得的字符串e以“\n”分割成一行一行的代码,并进行遍历。
l = l.lstrip() + “\n” lstrip()是将字符串最左边的空字符删掉,由于这个函数不能改变元数据,所以我们要将其赋值回给 l ,最后又再添加上“\n”进行换行。这样就做到把原数据每行开头的空格都删掉啦。

现在的缩进就一如往常啦!

三、你以为结束了嘛?

csv文件我知道了,现在再补充一个txt文件,毕竟咱就是说平常使用中,我没那么多题目需要我传答案,就想平常用用,那我也不能写在csv文件里再自动输入哇。没事咱再补充一点对txt文件的自动输入。

这里是使用框.txt文件中放的代码,格式很乱,可以说是完全看不到缩进,而python是最在乎格式的。

import time
import pyautogui
while True:a = input("是否开始开始为t,结束为n:>")if a == 't':time.sleep(3)b = open(r"C:\Users\HP\Desktop\使用框.txt", encoding='utf-8')for line in b.readlines():line = line.lstrip()pyautogui.typewrite(line)else:break

这里唯一改动了的地方就是readlines()是一次读取文件的所有文本,返回值是以行为元素的list,并且每一行后面都会自带一个“\n”。 这东西好,这回连“\n”都不需要我们加了,一个readlines()帮我们解决所有。为了使用方便,每次输入都需要重新启动程序,所以这里我添加的一个while循环。


当然大家也可以看到中文是没有输出的,如果大家想输出中文,可以切换中英文输入法 ,不过效果不是很好哦~ 所以这个就用来在那些不能复制粘贴的app上写写英语小作文,和一些OJ系统上进行编程比赛,摸摸鱼就可以了。
其实你说了这么多好像跟Qt没有半毛钱的关系哈。啊对现在我们又想更便利一点,我不想在txt文件里存了文件,再来运行程序,每次还要对txt文件进行手动清理,很麻烦。来了来了,PyQt5来了!

import sys
import time
import pyautogui
from PyQt5.QtWidgets import *
from PyQt5 import QtCoreclass Stats():def __init__(self):self.w = QWidget()self.w.resize(500, 400) # 窗口尺寸self.w.move(500, 300) # 窗口于显示器位置self.w.setWindowTitle('模拟复制粘贴') # 窗口标题# 使窗口停留在最前面self.w.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)# 创建输入子窗口控件self.textEdit = QPlainTextEdit(self.w) # 指定父控件self.textEdit.setPlaceholderText("请输入...") # 提示文本self.textEdit.move(15, 25)self.textEdit.resize(300, 350)# 创建一个按钮控件self.button = QPushButton('粘贴',self.w)self.button.clicked.connect(self.Paste) # 信号与槽连接self.button.move(350,80)def Paste(self):info = self.textEdit.toPlainText().split("\n")time.sleep(3)for line in info:line = line.lstrip() + "\n"pyautogui.typewrite(line)# 清空textEditself.textEdit.clear()# sys.argv捕获你在命令行运行此脚本时后面输入的所有参数
app = QApplication(sys.argv)
stats = Stats()
stats.w.show() # 窗口显示
app.exec_() # 进入程序的主循环直到exit()被调用

这里也是把获得到的文本内容以"\n"进行分割,删除每行最左边的空格后,再给每行末尾加回“\n”。 好啦,其实注释已经写得很小白了,这里只提两个地方,一个就是self.w.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) 这个可以依据需求使用,保持窗口始终在最上面,这样就方便我使用。再一个就是self.textEdit.clear() 因为不能说每次输入时,上一次的输入内容还存留在窗口中,所以在每次执行完一次后会清空子窗口(就是输入文本的那个窗口)。

当然如果大家只是写写英语作文,不需要更改格式 ,那以上对文本的处理就用不上了,可以自行删除修改,把Paste函数修改一下就可以(其实也就是把删除空格那部分去掉了)

    def Paste(self):info = self.textEdit.toPlainText()time.sleep(3)pyautogui.typewrite(info)# 清空textEditself.textEdit.clear()


好了,去摸鱼吧!

总结

解决网页,app不允许复制粘贴的问题,解决pyautogui.typewrite在编译器或在线编译器中自动输入时产生的缩进问题。结合PyQt5做的小窗口,实现自动输入。

【无聊的小东西之自动输入】相关推荐

  1. ASO小技能:自动输入搜索框文本

    文章目录 引言 I 自动输入搜索框文本的核心实现 1.1 切换到搜索tabbar 1.2 获取搜索界面的控制器 1.3 自动输入搜索框文本 see also 引言 应用场景:自动输入关键词,比如app ...

  2. python实现软件自动点击_鼠标自动点击、键盘自动输入?几行Python代码搞定

    第一步:安装并导入相关模块 只需要安装PyUserInput,如下:pip install PyUserInput 如果你是Win10系统,肯定会报错,具体怎么解决,我放在文章结尾讲,先把主要思路讲完 ...

  3. 怎样在python代码中输入π_鼠标自动点击、键盘自动输入?几行Python代码搞定

    相信我,你以后一定会用到.实在不行,你先收藏,做个收藏家,等拿出来,就值钱了. 第一步:安装并导入相关模块 只需要安装PyUserInput,如下: pip install PyUserInput 如 ...

  4. NYOJ 52 无聊的小明

    无聊的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 这天小明十分无聊,没有事做,但不甘于无聊的小明聪明的想到一个解决无聊的办法,因为他突然对数的正整数次幂产生了兴 ...

  5. python 自动输入_Python自动输入【新手必学】

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:哈喽哈嘿哈 这篇文章是我的第一篇文章,写的不好的地方,请大家多多指教哈,另 ...

  6. 硬币 假硬币 天平_小东西叫硬币

    硬币 假硬币 天平 During the last 1,5 years, I've been traveling a lot. Apart from my must-have things like ...

  7. easyui select ajax,easyui的combobox根据后台数据实现自动输入提示功能

    easyui的combobox根据后台数据实现自动输入提示功能 发布时间:2020-06-11 10:09:41 来源:51CTO 阅读:1981 作者:crackernet adauhuehkek最 ...

  8. 一至七-----小东西

    一至七-----小东西 用什么就声明什么,可以节约空间,如下: using std::cout using std::cin using std::endl cin和 cout 是 istream类 ...

  9. python 在软件自己自动输入-Python模拟百度自动输入搜索功能的实例

    如下所示: # 访问百度,模拟自动输入搜索 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要 ...

最新文章

  1. 用例设计大全(整理)
  2. 好久没写blog了。最近感觉自己老了
  3. c detail of macro
  4. python和c语言的对比_类C语言与Python负数除法求值间的差异
  5. php和python的选择排序算法,图文讲解选择排序算法的原理及在Python中的实现
  6. 关于 /dev/null 与 /dev/zero
  7. mysql主从异步复制_centos7mysql主从复制(默认异步)
  8. CSRF:跨站请求伪造
  9. python是开源的它可以被移植到许多平台上对吗_Python程序设计答案
  10. [总结]FFMPEG视音频编解码零基础学习方法--转
  11. 他写出了 Vue,却做不对这十道 Vue 笔试题
  12. 深度学习---循环神经网络RNN详解(LSTM)
  13. 使用OpenResty搭建高性能服务端
  14. 【AR开发】ARCore官方示例(Android)
  15. java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
  16. UE5 学习2- 快捷键
  17. 钟汉良日记:百善孝为先,其它都靠边
  18. 印象笔记Evernote 教程
  19. 杰里之697N进入定频测试和校正频偏】【篇】
  20. vmware15pro

热门文章

  1. java婚纱影楼管理系统论文_基于Java的婚纱影楼管理系统设计论文
  2. c语言uint8 t转字符串,C语言中uint8_t*转char*
  3. “零余额”账户为何从来不曾零
  4. 朴素贝叶斯分类器的例子
  5. SharePoint 2016 企业项目管理应用(二,基础安装配置SQL Server 2014 安装)
  6. scraino编程流程图_青岛Scraino编程课程
  7. SLAM笔记(二)透视投影
  8. 个人求职简历怎么制作?手机怎么找简历下载?
  9. MYNTEYE小觅双目摄像头深度版+VINS测试
  10. fasttext源码剖析