首页 > 其他分享 >作业帮诗词pk自动化脚本__广大附中摸鱼小组制作

作业帮诗词pk自动化脚本__广大附中摸鱼小组制作

时间:2024-11-10 16:20:04浏览次数:6  
标签:__ img startupinfo subprocess question1 Nox 摸鱼 pk png

本文由广大附中摸鱼小组创作

作业帮诗词pk题目样例

在这里插入图片描述

运行脚本前的准备工作

注意,此脚本可能只支持windows操作系统(其他操作系统的兼容性未经过测试)
1.在电脑上下载夜神模拟器 官网网址为https://www.yeshen.com/
2.运行夜神模拟器,进入夜神模拟器的设置界面,将分辨率修改为“手机版”“900×1600”
在这里插入图片描述
3.在搜索引擎搜索“作业帮口算”,并下载作业帮口算的安装包(建议先下载到电脑上,而不是直接下载到模拟器中
4.在夜神模拟器正在运行的情况下在电脑上(不是在模拟器中)用鼠标双击作业帮口算的安装包,等待一段时间,即可自动完成作业帮口算的安装(因为我的作业帮口算的安装包已经删了,所以这一步就不发图片了,不过相信大家是可以弄明白的)
5.用**python3.8(其他版本的python兼容性未经过测试)**打开我的脚本(脚本在此文的后半部分)
6.找到夜神模拟器的快捷方式,右键点击,点击右键菜单中的“打开文件所在的位置(I)”选项,打开夜神模拟器的安装目录
在这里插入图片描述
在这里插入图片描述
7.复制夜神模拟器的安装目录(注意是bin目录
在这里插入图片描述

8.打开脚本(脚本在后面),将脚本中的D:/Program Files/Nox/bin替换成你自己的bin目录(替换完成后,一定要再用python的查找功能查找一下是不是还有D:/Program Files/Nox/bin没成功替换的,避免操作失误造成严重后果
在这里插入图片描述
9.打开夜神模拟器的电脑共享目录
在这里插入图片描述
10.打开ImageShare文件夹,复制路径
在这里插入图片描述

在这里插入图片描述
11.打开脚本,将C:/Users/Administrator/Nox_share/ImageShare目录替换成自己的ImageShare目录(同样,替换完之后要用python的“查找”功能检查是否还有C:/Users/Administrator/Nox_share/ImageShare目录没替换成功)在这里插入图片描述
12.用pip安装ddddocr模块(为加快下载速度,可以考虑换源)
PIL库我忘记是不是python自带的了,如果不是,可能也要手动安装
13.请删除腾讯的安装目录下的AndroidServer目录中的所有文件(因为腾讯QQ捆绑安装了一个adb,他会和我们夜神模拟器的adb冲突)(如果提示权限不够,请修改该文件夹的权限,此处不再赘述具体方法
(比较恶心的事)
在这里插入图片描述

14.进入作业帮口算,打开诗词pk
在这里插入图片描述

在这里插入图片描述

15.运行脚本即可(注意,当脚本进行完一次pk后,脚本会停顿5s-10s,然后会自动点击继续下一局pk的按钮,在这段时间内,有时候脚本会不小心点进作业帮的其他页面,但是你不用担心,过几秒后脚本会自动解决这个问题,所以你完全没有必要自己去去手动点击继续pk的按钮
16.玄学问题:有时候脚本会出现无法截图并识别题目的情况,这种情况下,请重启模拟器,他大概率就会恢复正常(据我所知,这种情况下是脚本在执行adb的截图命令的时候出错了,报错信息为No devices/emulators found,但是我并没有在网上找到任何正规的解决方案

脚本编写思路(未写完,下次再补)

在脚本运行过程中,脚本将不断循环用adb命令截图,将图片中题目和选项对应的部分进行裁剪,并用ddddocr识别出裁剪出的图片中的题目和四个选项,并从网络上用爬虫搜索完整的诗句,并判断哪个选项中的字是在诗句中出现过的,然后点击那个选项。当比赛结束后,脚本会停顿一段时间,然后自动点击继续pk的按钮

脚本内容

import os
import subprocess
import ddddocr
from time import sleep
from PIL import Image
import requests
from urllib.parse import quote
import re
import msvcrt
temp="abc"
result="1"
same=0
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
n=0
num=0
def take_screenshot():
    process=subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell screencap -p /storage/emulated/0/Pictures/test.png""", startupinfo=startupinfo)
    with open('C:/Users/Administrator/Nox_share/ImageShare/test.png', 'rb') as f:
        print("正在获取屏幕截图……\n")
        return f.read()

def remove_non_chinese(text):
    result = re.sub(r'[^\u4e00-\u9fa5]', '', text)
    return result

def remove_last(s, target):
    index = s.rfind(target)
    if index == -1:
        return s
    return s[:index] + s[index + len(target):]

print("正在初始化ocr……\n")
ocr = ddddocr.DdddOcr(show_ad=False)
while True:
    #sleep(0.5)
    num+=1
    screenshot=take_screenshot()
    if os.path.getsize('C:/Users/Administrator/Nox_share/ImageShare/test.png') > 0:
        try:
            with Image.open("C:/Users/Administrator/Nox_share/ImageShare/test.png") as img:
                img_question1=img.crop((98,567,790,669))
                img_question1.save("question1.png")
                img_question2=img.crop((101,705,797,800))
                img_question2.save("question2.png")
                img_choice1=img.crop((186,1100,300,1191))
                img_choice1.save("choice1.png")
                img_choice2=img.crop((601,1095,720,1192))
                img_choice2.save("choice2.png")
                img_choice3=img.crop((186,1336,305,1440))
                img_choice3.save("choice3.png")
                img_choice4=img.crop((596,1335,714,1441))
                img_choice4.save("choice4.png")
                img_finishbutton=img.crop((159,1348,349,1400))
                img_finishbutton.save("finish.png")
                img_finish2=img.crop((262,78,326,113))
                img_finish2.save("finish2.png")
                img_finish3=img.crop((403,1513,499,1566))
                img_finish3.save("finish3.png")
                img_finish4=img.crop((297,391,412,425))
                img_finish4.save("finish4.png")
            #img_choice1=img.crop(())
            
            image = open("question1.png", "rb").read()
            question1 = ocr.classification(image)
            question1=remove_non_chinese(question1)
            if question1==temp:
                same+=1
                n+=1
                n=n%4
                if 1==1:
                    print(f"识别题目出现重复,正在重试,已重试次数为为{same}\n")
                    temp=question1
                    sleep(0.3)
                    screenshot=take_screenshot()
                    with Image.open("C:/Users/Administrator/Nox_share/ImageShare/test.png") as img:
                        img_question1=img.crop((98,567,790,669))
                        img_question1.save("question1.png")
                        image = open("question1.png", "rb").read()
                        question1 = ocr.classification(image)
                        question1=remove_non_chinese(question1)
                        img_question2=img.crop((101,705,797,800))
                        img_question2.save("question2.png")
                        img_choice1=img.crop((186,1100,300,1191))
                        img_choice1.save("choice1.png")
                        img_choice2=img.crop((601,1095,720,1192))
                        img_choice2.save("choice2.png")
                        img_choice3=img.crop((186,1336,305,1440))
                        img_choice3.save("choice3.png")
                        img_choice4=img.crop((596,1335,714,1441))
                        img_choice4.save("choice4.png")
                        img_finishbutton=img.crop((159,1348,349,1400))
                        img_finishbutton.save("finish.png")
                        img_finish2=img.crop((262,78,326,113))
                        img_finish2.save("finish2.png")
                        img_finish3=img.crop((403,1513,499,1566))
                        img_finish3.save("finish3.png")
                        img_finish4=img.crop((297,391,412,425))
                        img_finish4.save("finish4.png")
                    #temp="abc"
                    '''
               else:
                    print(f"识别题目出现重复,开启顺序点击模式,same值为{same}\n")
                    if n==0:
                        subprocess.Popen("D:/Program Files/Nox/bin/nox_adb.exe shell input tap 239 1145", startupinfo=startupinfo)
                    if n==1:
                        subprocess.Popen("D:/Program Files/Nox/bin/nox_adb.exe shell input tap 657 1139", startupinfo=startupinfo)
                    if n==2:
                        subprocess.Popen("D:/Program Files/Nox/bin/nox_adb.exe shell input tap 238 1385", startupinfo=startupinfo)
                    if n==3:
                        subprocess.Popen("D:/Program Files/Nox/bin/nox_adb.exe shell input tap 661 1385", startupinfo=startupinfo)
                        '''
            if question1!=temp or same>2:
                if question1!=temp:
                    same=0
                image = open("question1.png", "rb").read()
                question1 = ocr.classification(image)
                question1=remove_non_chinese(question1)   
                temp=question1
                image = open("finish.png", "rb").read()
                finish = ocr.classification(image)
                finish=remove_non_chinese(finish)
                #print(f"finish的值为{finish}\n")
                if(finish=="炫耀一下" or finish=="屹耀下" or finish=="灯烟丁"):
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 643 1380""", startupinfo=startupinfo)
                    sleep(5)
                image = open("finish2.png", "rb").read()
                finish2 = ocr.classification(image)
                finish2=remove_non_chinese(finish2)
                if finish2=="原文":
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 48 96""", startupinfo=startupinfo)
                    sleep(1)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 672 1504""", startupinfo=startupinfo)
                    sleep(1)
                image = open("finish3.png", "rb").read()
                finish3 = ocr.classification(image)
                finish3=remove_non_chinese(finish3)
                if finish3=="取消":
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 448 1538""", startupinfo=startupinfo)
                    sleep(1)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 643 1380""", startupinfo=startupinfo)
                    sleep(5)
                image = open("finish4.png", "rb").read()
                finish4 = ocr.classification(image)
                finish4=remove_non_chinese(finish4)
                print(f"finish4的值为{finish4}\n")
                if finish4=="暂无内容":
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input keyevent KEYCODE_BACK""", startupinfo=startupinfo)
                    sleep(1)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 672 1504""", startupinfo=startupinfo)
                    sleep(5)
                print("题目第一行:",question1,"\n")
                image = open("question2.png", "rb").read()
                question2 = ocr.classification(image)
                question2=remove_non_chinese(question2)
                print("题目第二行:",question2,"\n")
                image = open("choice1.png", "rb").read()
                choice1 = ocr.classification(image)
                choice1=remove_non_chinese(choice1)
                if(len(choice1)>1):
                    choice1=choice1[0]
                image = open("choice2.png", "rb").read()
                choice2 = ocr.classification(image)
                choice2=remove_non_chinese(choice2)
                if(len(choice2)>1):
                    choice2=choice2[0]
                image = open("choice3.png", "rb").read()
                choice3 = ocr.classification(image)
                choice3=remove_non_chinese(choice3)
                if(len(choice3)>1):
                    choice3=choice3[0]
                image = open("choice4.png", "rb").read()
                choice4 = ocr.classification(image)
                choice4=remove_non_chinese(choice4)
                if(len(choice4)>1):
                    choice4=choice4[0]
                print("识别出的四个选项为:",choice1," ",choice2," ",choice3," ",choice4,"\n")
                url = "https://www.gushiwen.cn/search.aspx"
                params = {
    "value": f"{question1}",
    "valuej": "a"
}
                params['value']=quote(question1,safe='')
                params['valuej']=quote(question1[0],safe='')
                headers = {
    "Host": "www.gushiwen.cn",
    "Cookie": "",
    "Sec-Ch-Ua": "",
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": "",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.5790.110 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Sec-Fetch-Site": "same-origin",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-User": "?1",
    "Sec-Fetch-Dest": "document",
    "Referer": "https://www.gushiwen.cn/search.aspx?type=shiwen&page=1&value=%e5%8c%97%e9%a3%8e%e5%90%b9%e9%9b%81%e9%9b%aa%e7%ba%b7%e7%ba%b7&valuej=%e5%8c%97",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9"
}
            
                response = requests.get(url, params=params, headers=headers)
                response1=remove_non_chinese(response.text)
                response1=response1.replace(question1,'',1)
                response1=remove_last(response1,question1)
                print("正在查询题目中古诗词","\n")
                position = response1.find(question1)
                if len(question1)==7 or len(question2)==7:
                    print("识别为七言诗\n")
                    length=7
                if len(question1)==5 or len(question2)==5:
                    print("识别为五言诗\n")
                    length=5
                if position != -1:
                    result=response1[position:position+2*length]
                    print("成功找到诗句:", result,"\n")
                else:
                   params['value']=quote(question2,safe='')
                   params['valuej']=quote(question2[0],safe='')
                   response = requests.get(url, params=params, headers=headers)
                   response2=remove_non_chinese(response.text)
                   response2=response2.replace(question2,'',1)
                   response2=remove_last(response2,question2)
                   position = response2.find(question2)
                   if position != -1:
                       result=response2[position-length:position+length]
                       print("成功找到诗句:",result ,"\n")
                   else:
                       print("检索诗句失败,即将开始点击全部选项\n")
                       #os.system("pause")
                       subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 239 1145""", startupinfo=startupinfo)
                       sleep(0.3)
                       subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 657 1139""", startupinfo=startupinfo)
                       sleep(0.3)
                       subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 238 1385""", startupinfo=startupinfo)
                       sleep(0.3)
                       subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 661 1385""", startupinfo=startupinfo)
                       continue

                already=False
                if result.find(choice1)!=-1:
                       print("答案为选项A\n")
                       subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 239 1145""", startupinfo=startupinfo)
                       already=True
                if result.find(choice2)!=-1:
                    print("答案为选项B\n")
                    if(already==True):
                        sleep(0.3)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 657 1139""", startupinfo=startupinfo)
                    already=True
                if result.find(choice3)!=-1:
                    print("答案为选项C\n")
                    if(already==True):
                        sleep(0.3)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 238 1385""", startupinfo=startupinfo)
                    already=True
                if result.find(choice4)!=-1:
                    print("答案为选项D\n")
                    if(already==True):
                        sleep(0.3)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 661 1385""", startupinfo=startupinfo)
                    already=True
                if result.find(choice1)==-1 and result.find(choice2)==-1 and result.find(choice3)==-1 and result.find(choice4)==-1:
                    print("无法找到正确的选项,即将开始点击全部选项\n")
                    #os.system("pause")
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 239 1145""", startupinfo=startupinfo)
                    sleep(0.3)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 657 1139""", startupinfo=startupinfo)
                    sleep(0.3)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 238 1385""", startupinfo=startupinfo)
                    sleep(0.3)
                    subprocess.Popen(r""""D:/Program Files/Nox/bin/nox_adb.exe" shell input tap 661 1385""", startupinfo=startupinfo)
        except Exception as e:
            print("发生错误:", e,"\n")
    else:
        print("截图文件为空!。\n")

备注

有人可能会想到,作业帮诗词pk也可以用鼠标连点器把四个选项都点一下来实现快速做题,但是本人已经向作业帮口算官方反映过有人用鼠标连点器开挂的问题并给他们提供了解决方案,不过作业帮口算截至发稿为止仍未着手解决这个问题。
在这里插入图片描述

标签:__,img,startupinfo,subprocess,question1,Nox,摸鱼,pk,png
From: https://blog.csdn.net/China_tiger_king/article/details/143660840

相关文章

  • Python实现SSA智能麻雀搜索算法优化BP神经网络回归模型(优化权重和阈值)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后关注获取。1.项目背景随着人工智能技术的发展,机器学习算法在各个领域的应用越来越广泛。其中,神经网络作为一类重要的机器学习方法,在模式识别、图像处理、自然语言处......
  • 美团商家电话采集软件团购外卖卖家联系方式提取器
    美团商家电话采集软件团购外卖卖家联系方式提取器以下是一个简单的Python代码示例,它演示了如何读取一个假设的商家信息列表(这里以列表形式给出,而不是从美团平台获取),并打印出商家的名称和假设的联系方式(请注意,这只是一个示例,并不涉及任何真实数据的采集):python假设的商家信息列表......
  • PMP--入栏需看
    文章目录报名英文报名中文报名备考第一步第二步基础实践冲刺题库一模二模三模冲刺必刷分类常考易错报名英文报名PMP–报名中文报名备考第一步PMP–学习计划第二步PMP–备考书籍说明基础PMP–知识卡片PMP–敏捷ScrumPMP–计算–图示PMP–计算–挣值分......
  • OpenGL 和 GLSL 在顶点着色器中动态调整裁剪平面参数的简单代码示例
    以下是一个使用OpenGL和GLSL在顶点着色器中动态调整裁剪平面参数的简单代码示例://OpenGL初始化代码#include<GL/glew.h>#include<GLFW/glfw3.h>#include<iostream>GLFWwindow*window;//初始化GLFWvoidinitGLFW(){if(!glfwInit()){std::cer......
  • 2024最新AI绘画系统软件(Midjourney)+GPT4文档分析总结,多模态识图理解,AI文生图/图生图/
    一、前言人工智能的快速发展已成为全球关注的焦点,其应用领域广泛,涵盖绘图、语言处理、视频编辑等。前沿技术不仅推动科技创新,还在艺术创作、内容生产和商业实践等方面展示出巨大潜力。例如,AI语言模型显著提升了内容自动生成、智能客服和文本翻译的效率及用户体验;AI绘图技术为......
  • GPU OpenGL 管线
    GPUOpenGL管线主要分为以下几个阶段:顶点数据输入:数据定义与准备:开发者定义要渲染的图形的顶点数据,这些数据包含了每个顶点的位置、颜色、纹理坐标、法线向量等信息。例如,对于一个简单的三角形,需要指定三个顶点的三维坐标以及相关属性。这些数据通常存储在内存中,可以通过数组......
  • Python爬虫学习笔记
    目录基础篇:HTTP:HTTP请求:请求行:请求头:请求体:HTTP响应:状态行:响应头:响应体:Requests库:GET请求:POST请求:HTML:HTML网页结构:HTML标签:网页解析:RegularExpression:元字符:量词:正则表达式:Re解析:实战案例:BeautifulSoup:安装:成员属性/函数:实战案例:Xpath:XML:语法:进阶篇:Cookie处理:防盗链:代理(很刑):飞......
  • Redis四种架构模式
    文章目录1.引言2.单机模式概述优缺点分析配置与优化3.主从复制模式概述主从同步机制读写分离常见问题示例配置4.哨兵模式哨兵模式的架构工作原理选举机制哨兵模式配置常见问题与调试建议5.Cluster模式概述Cluster模式的架构组成数据分片与重分片故障检测与恢复......
  • 【Linux】常用命令(2.6万字汇总)
    文章目录Linux常用命令汇总1.基础知识1.1.Linux系统命令行的含义1.2.命令的组成2.基础知识2.1.关闭系统2.2.关闭重启2.3.帮助命令(help)2.4.命令说明书(man)2.5.切换用户(su)2.6.历史指令3.目录操作3.1.切换目录(cd)3.2.查看目录(ls)3.3.创建目录(mkdir)3.4.删除目录......
  • call(),bind(),apply(),的区别和手写
    1.call(),bind(),apply()的区别call(),bind(),和apply()是JavaScript中用于改变函数执行上下文(即this的指向)的方法,它们之间有一些区别:call():call()方法允许你调用一个具有指定this值的函数,并且允许你传递一个参数列表。它的语法是function.call(thisArg,ar......