首页 > 编程语言 >python小程序——实现答题作弊

python小程序——实现答题作弊

时间:2024-06-15 19:58:29浏览次数:23  
标签:鼠标 答题 python 作弊 content flag print import mouse

前言:

        本程序可实现对已给出题库的网页知识答题活动能够自动给出答案功能,由于写程序的时候马上就快要到考试时间了,所以写的有点仓促,后续可完善的地方还有很多,不过这个简陋版的能用就行。

        本程序的使用步骤是只需鼠标选择一下题目的文本,程序就会自动给出答案。

程序原理:

        程序的实现原理是使用pynput中的监听鼠标函数,只要当鼠标按下时的坐标不等于松开时的坐标即可判断出鼠标完成框选了,接着使用pyperclip库(获取剪切板)与pyautogui库(用于模拟ctrl+c)判断鼠标完成框选后,模拟ctrl+c键把题目文本复制到剪切板中,再通过读取剪切板完成对题目文本的读取,接着使用python-docx库现将docx格式的题库导入,然后进行比对,使其输出对应的答案即可。

程序源码:

需要导入的库:
from docx import Document
import pyperclip
from pynput.mouse import Listener
from pynput import keyboard
import pyautogui
import win32clipboard as w
#全局变量
drag_flag = True # 判断双击
mouse_press = (0,0)   # 鼠标释放的坐标
mouse_release =(0,0)  # 鼠标按下的坐标

如果没有对应的库,就用pip install xxx下载一下即可

鼠标监听功能:
def on_click(x, y, button, pressed):
    # 监听鼠标点击
    global drag_flag,mouse_press,mouse_release
    if drag_flag:
        drag_flag = False
    else:
        drag_flag = True
    if pressed:
        mouse_press = (x, y)
    else:
        mouse_release = (x, y)
    if drag_flag:
        if mouse_press != mouse_release:   # 按下和抬起的坐标不相等
            #鼠标拖动事件
            w.EmptyClipboard
            pyautogui.hotkey('ctrl','c')
            recent_txt = pyperclip.paste()  # 获取剪切板
            w.EmptyClipboard
            #print(recent_txt)
            findanswer(recent_txt)  # 执行翻译函数
        else:
            pass
            # 鼠标点击事件
比对与输出功能:
def find(file_path, content):  
    docx = Document(file_path)
    print(content)
    found = False 
    count = 0
    for para in docx.paragraphs:
      
        if content in para.text:  
            
            print(f"Found '{content}' in paragraph:")  
            print(para.text)  
             
            found = True  
            count = 0  # 重置计数器,因为我们刚刚找到了一个匹配的段落
        elif found:  
            print(para.text)  # 打印接下来的段落  
            count += 1  
            if count >= 8:  # 如果已经打印了四个段落,停止打印
                print("***********")  # 空行,以便在输出中分隔不同的段落  
                break 
def findanswer(content):
    find("C:\\Users\\z\\Desktop\\python homework\\zxb.docx",content)

        注意使用的时候要把题库的地址导入到find函数中,最好设置一个文件夹,把题库与程序放一起然后用vscode打开文件夹。

主函数:
def main():
    with Listener(on_click=on_click) as listener:
         listener.join()

if __name__ == '__main__':
    main()

运行例子:

        鼠标选中一段文本后,答案直接输出在vscode中

以后的改进方向

        在实际使用时发现,有的答题网页是禁止鼠标选择且禁止复制的,这个时候我一般有两种办法,第一种是浏览器那三个点里找“开发者选项”,有个按钮叫“在页面中选中一个元素以进行检查”点击按钮后点击题目所在位置,开发者工具中就会有题目对应的网页元素,在网页元素中题目就可以选择了。另一种方法是点击打印按钮,在打印界面可以进行复制与选择了。

所以以后的改进方向可以是:

自动读取题目对应的网页元素,实现自动读取题目的功能。

设置鼠标的坐标,以实现鼠标自动答题,自动读取选择按钮的间隔然后自动计算点击位置。

答案显示界面可以设定为显示在页面最上层,这样就不用切屏来看答案了。

总程序:


from docx import Document
import pyperclip
from pynput.mouse import Listener
from pynput import keyboard
import pyautogui
import win32clipboard as w



#全局变量
drag_flag = True # 判断双击
mouse_press = (0,0)   # 鼠标释放的坐标
mouse_release =(0,0)  # 鼠标按下的坐标

def find(file_path, content):  
    docx = Document(file_path)
    print(content)
    found = False 
    count = 0
    for para in docx.paragraphs:
      
        if content in para.text:  
            
            print(f"Found '{content}' in paragraph:")  
            print(para.text)  
             
            found = True  
            count = 0  # 重置计数器,因为我们刚刚找到了一个匹配的段落
        elif found:  
            print(para.text)  # 打印接下来的段落  
            count += 1  
            if count >= 8:  # 如果已经打印了四个段落,停止打印
                print("***********")  # 空行,以便在输出中分隔不同的段落  
                break 
def findanswer(content):
    find("C:\\Users\\z\\Desktop\\python homework\\zxb.docx",content)
    

# 监听鼠标

def on_click(x, y, button, pressed):
    # 监听鼠标点击
    global drag_flag,mouse_press,mouse_release
    if drag_flag:
        drag_flag = False
    else:
        drag_flag = True
    if pressed:
        mouse_press = (x, y)
    else:
        mouse_release = (x, y)
    if drag_flag:
        if mouse_press != mouse_release:   # 按下和抬起的坐标不相等
            #鼠标拖动事件
            w.EmptyClipboard
            pyautogui.hotkey('ctrl','c')
            recent_txt = pyperclip.paste()  # 获取剪切板
            w.EmptyClipboard
            #print(recent_txt)
            findanswer(recent_txt)  # 执行翻译函数
        else:
            pass
            # 鼠标点击事件
def main():
    with Listener(on_click=on_click) as listener:
         listener.join()

if __name__ == '__main__':
    main()

标签:鼠标,答题,python,作弊,content,flag,print,import,mouse
From: https://blog.csdn.net/shiwen233/article/details/139707079

相关文章

  • python: time object
     #encoding:utf-8#版权所有2024涂聚文有限公司#许可信息查看:#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python3.11#Datetime:2024/6/1518:59#User:geovindu#Product:PyCharm#Project:pyBaiduAi#F......
  • python保存文件后打不开的原因是什么
    引入数据集,奇怪的是怎么也打不开,显示不存在这个文件:但是,我将文件改个名字,就打开了,难道csv的文件命名必须有一定合法性?import pandasusers = pandas.read_csv("H:\python\data analysis\countries.csv")尝试由此,我试了几个别的名字,直到我尝试了u开头的。原因终......
  • python bytes是什么
    在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至......
  • Python for循环
    Pythonfor循环for循环的基本语法for循环是编程中常用的结构,用于重复执行一段代码块指定的次数或遍历某个序列(如列表、元组、字符串或集合)中的每个元素。以下是for循环的基本语法结构:for变量in序列:#执行的代码块#可以是任何有效的Python语句#这个代码......
  • python的def函数用法
    Python中的def关键字用于定义函数。函数是一段可重用的代码块,它接受输入(称为参数),执行一些操作,并可以选择性地返回一个输出值。下面是定义和使用Python函数的基本步骤:定义函数:使用def关键字开始定义函数,后跟函数名和圆括号()。圆括号内可以包含零个或多个参数。然后,在......
  • Python武器库 - 科研中常用的python字符串处理 - 字符串扩充
    在python科研编程中,字符串扩充通常在处理文件名、数据集列表、或打印模型训练过程信息时非常实用,尤其是打印模型训练过程信息时,通常需要在每一轮之间打印一行符号表示分隔,此时字符串扩充的功能尤其好用,它能够省去手动输入字符的时间,使得输出字符串更加工整。1.str.center(widt......
  • 比较适合小白练手的Python项目!
    一.学习Python需要掌握的技能成为Python高手需要一定的时间和实践,但以下是一些建议,可以帮助你更快入门并提高技能:学习基础知识:-了解Python的基本语法、数据类型、控制流等。-学习函数、模块和包的使用。深入理解数据结构和算法:-学习常见的数据结构(列表、字典、集合......
  • 用Python制作淘宝自动抢购脚本
     在京东淘宝中有很多特价商品,但是有些商品属于限量购买,需要抢拍。有很多黄牛通过非法脚本获取大量限购商品订单来获取利益。那么像这种抢拍软件是如何做到的呢?importtimefromseleniumimportwebdriverimportwin32com.clientspeaker=win32com.client.Dispatch("SAP......
  • python爬取校园集市帖子并生成词云图
    注:本篇需要python基础,json基础前言:上篇我们学习了怎么用python获取百度热搜,在这篇中,我们将进一步学习,利用python爬取校园集市帖子并生成词云图目录第一步,分析请求第二步,编写代码第三步,批量获取帖子第四步,绘制词云图灵感背景:经常在群里看见机器人转发的校园集市帖子,于是想要爬......
  • python-再求f(x,n)
    [题目描述]已知 用递归函数求解。输入:第一个数是 ......