无聊的小东西——自动输入(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. UCI机器学习数据集库
  2. 趣谈NAT和防火墙的对话+防火墙静态PAT的应用
  3. 中国新型储能市场技术进展与投资经营模式建议分析报告2022-2028年版
  4. puts遇到空格无法输出_输入一句英文,只包含字母和空格,如何输出这句英文中.....-黑马程序员技术交流社区...
  5. 转Oracle Data Guard 理论知识3-自动裂缝检测和解决
  6. python微信跳一跳小游戏刷分
  7. [转]hadoop新手错误解决方法
  8. 专题导读:高性能计算虚拟数据空间
  9. 开发、运维过程中解决问题的通用步骤
  10. 2008服务器系统只有回收站,清除Windows Server 2008 R2中所有用户的回收站
  11. Unity 自定义扩展Hierachy右键菜单
  12. python长度单位换算表_长度单位换算表大全
  13. 互联网电商大数据架构图
  14. netcfg.hlp 官方版
  15. 3ds Max Taper、Twist和Bend的运用——衣架的制作
  16. 笔记本电脑桌面便签哪个软件好用,桌面便签软件下载
  17. 基础程序教学教程【语言:python3.4】
  18. 添加账号Linux命令,linux使用useradd命令添加用户
  19. win7 解决飞秋无法接收文件(准备接收)问题
  20. 多个域名对应一个ip的解决办法

热门文章

  1. 投资新“鸡”遇,金鸡达人DAPP养鸡游戏震撼来袭
  2. 毕业论文说明书排版样例
  3. 完美解决mysql保存中文出现1366错误
  4. 用定积分计算位移与距离示例:
  5. JS较为标准的四舍五入保留n位小数取法
  6. 安装Vue node 及 创建一个Vue 项目
  7. 浅谈高通的MSM7230-评各大厂商
  8. 炫酷的元素周期表html,经典化学元素周期表页面源码
  9. go语言之json的使用
  10. php 内置接口,LyApi: LyAPI是一款轻量级的PHP 接口开发框架,可快速开发出易维护、高性能的API接口。内置缓存、日志、数据库操作、国际化等功能。- 2.0已推出!!...