本文由广大附中摸鱼小组创作
作业帮诗词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<