使用python和adb来学习(学习通)
在某一天赶课比较着急,奈何找不到人可以帮我,于是自己动手写了一个简单的脚本来学习
准备工作:
1、需要一个你不用的手机,打开手机的adb,因为需要用到adb来操作手机
2、进入百度智能云,申请一个 通用的文字识别带位置的,新用户好像是送1000次,对我来说够用了
3、电脑配置好adb的环境
关于python和adb的版本:
关于百度智能云的调用,百度给出了一个详细的指导
下面是自己写的一个小脚本,仅供参考学习
我能力有限,有很多细节没有处理好,比如,有的时候一个章节会学习两遍,但对于我来说不耽误事就行。可以自己修改完善
大佬轻喷,感谢
# encoding:utf-8
import sys
import os
import copy
import requests
import base64
import time
import json
import re
class xuexitong:
def PngGrab(): #抓取图片
os.system("adb exec-out screencap -p > C:\\Users\\Administrator\\Desktop\\photo\\hhh.png")
print("抓取图片成功")
time.sleep(2)
def ReturnKek():#返回键
os.system("adb shell input keyevent 4")
print("按下返回键")
time.sleep(2)
def ClickPlay():#点击屏幕中间进行播放
os.system("adb shell input tap 402 527")
print("点击屏幕播放")
time.sleep(2)
def SlideScreen():#向下滑动
os.system("adb shell input swipe 500 900 500 850")
print("向下滑动")
def SleepTimes(usertime):#等待时间
waittime = usertime*60
time.sleep(waittime)
def ClickButton(p_top,p_left,p_width,p_height): #点击获取到的坐标
p_x = int(p_left + (p_width - p_width/3))
p_y = int(p_top + p_height/2)
strposition = "adb shell input tap "+str(p_x)+" "+str(p_y)
os.system(strposition)
time.sleep(8)
def AnalysisText():#对解析的字符串进行处理
'''
0,为列表界面
1,为播放界面
2,为没有内容
'''
flag = -1
m_PngAnalysisStr = xuexitong.PngAnalysis()
if(m_PngAnalysisStr.find("高清")!=-1):
flag = 1
print("当前模式为播放视频模式")
else:
flag = 0
print("当前模式为界面模式")
if(m_PngAnalysisStr.find("未编辑内容") > 0):
flag = 2
print("该小章节没有内容")
if(m_PngAnalysisStr == "false"):
print("解析错误,直接返回")
exit(0)
if(flag==-1):
print("不清楚此刻的状态,返回")
exit(0)
if(flag==1):
json_str = m_PngAnalysisStr.replace("'",'"')
result = json.loads(json_str)
num = result['words_result_num']
for i in range(0,num):
str_search = result['words_result'][i]['words']
regex = re.compile('[0-9][0-9]:[0-9][0-9]/[0-9][0-9]:[0-9][0-9]')
if(regex.findall(str_search)):
str_search = str_search[6:8]
sleeptimenum = int(str_search)+1
print("解析成功,请等待时间:",sleeptimenum)
xuexitong.SleepTimes(sleeptimenum)
print("播放结束")
return 1
if(flag==0):
json_str = m_PngAnalysisStr.replace("'",'"')
result = json.loads(json_str)
num = result['words_result_num']
for i in range(7,num):
str_search = result['words_result'][i]['words']
regex = re.compile('[0-9]\.[0-9]\w*')
if(regex.findall(str_search)):
if(str_search.find("本章测验")==-1):
print("找到需要学习的章节:",str_search)
#def ClickButton(p_top,p_left,p_width,p_height): #点击获取到的坐标
m_top = result['words_result'][i]['location']['top']
m_left = result['words_result'][i]['location']['left']
m_width = result['words_result'][i]['location']['width']
m_height = result['words_result'][i]['location']['height']
xuexitong.ClickButton(m_top,m_left,m_width,m_height)
break
if(flag==2):
return 2
def PngAnalysis():#解析当前的图片
request_url = "百度api的网址"
# 二进制方式打开图片文件
imgPath = "C:\\Users\\Administrator\\Desktop\\photo\\hhh.png"
f = open(imgPath,'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = '这里是你的access_token'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': '百度中有详细说明'}
response = requests.post(request_url, data=params, headers=headers)
if response:
return response.text
else:
return "false"
if __name__=='__main__':
'''
1、正常播放看完
2、里面没有内容
'''
obj1 = xuexitong
while(1):
time.sleep(2)
print("开始抓取界面列表")
xuexitong.PngGrab()
print("开始分析界面")
time.sleep(5)
xuexitong.AnalysisText()
xuexitong.ClickPlay() #点击播放
print("判断是否有内容")
time.sleep(5)
xuexitong.ClickPlay() #点击显示
xuexitong.PngGrab()
implementResult = xuexitong.AnalysisText()
if(implementResult == 1):
xuexitong.ReturnKek()
xuexitong.ReturnKek()
if(implementResult == 2):
xuexitong.ReturnKek()
xuexitong.SlideScreen()
使用python和adb来学习(学习通)的更多相关文章
- (转)Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
- 编写高质量代码改善python程序91个建议学习01
编写高质量代码改善python程序91个建议学习 第一章 建议1:理解pythonic的相关概念 狭隘的理解:它是高级动态的脚本编程语言,拥有很多强大的库,是解释从上往下执行的 特点: 美胜丑,显胜隐 ...
- Python自动化培训第一周学习总结
Python自动化培训第一周学习结束,看视频复习,把作业完成了. 总体来说,开卷有益. 首先,工具真是好东西,能够极大提升效率,也是人区别于动物所在.想起前任大领导对工具的不屑,本质也是对效率的不屑, ...
- python实用库:PrettyTable 学习
python实用库:PrettyTable 学习 PrettyTable说明 PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格,十分实用. 以下为官方介绍: ...
- Python 日期时间处理模块学习笔记
来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...
- 《Think Python》第17章学习笔记
目录 <Think Python>第17章学习笔记 17.1 面向对象的特性(Object-oriented features) 17.2 打印对象(Printing objects) 1 ...
- 《Think Python》第16章学习笔记
目录 <Think Python>第16章学习笔记 16.1 Time 16.2 纯函数(Pure functions) 16.3 修改器(Modifiers) 16.4 原型 vs. 方 ...
- 《Think Python》第15章学习笔记
目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...
- 马哥教育python网络班19期 学习目标
马哥教育python网络班19期 学习目标: (1)按群里的学习进度表,来自行学习,学完时间6个月. (2)学完后,薪资能达到20K+每月.
- 孤荷凌寒自学python第八十一天学习爬取图片1
孤荷凌寒自学python第八十一天学习爬取图片1 (完整学习过程屏幕记录视频地址在文末) 通过前面十天的学习,我已经基本了解了通过requests模块来与网站服务器进行交互的方法,也知道了Beauti ...
随机推荐
- JavaScript:操作符:正负号和自增自减及其隐式转换数据类型
正负号 正号即加号,负号即减号,运算结果同数学意义一样: 对非数字类型进行正负号运算,会隐式转换为数字,再进行运算: 一些特殊的非数字,转换情况同算术运算符: 自增自减 自增即为++,自减即为--. ...
- 一阶段目标检测网络-RetinaNet 详解
摘要 1,引言 2,相关工作 3,网络架构 3.1,Backbone 3.2,Neck 3.3,Head 4,Focal Loss 4.1,Cross Entropy 4.2,Balanced Cro ...
- 如何自定义调整bootstrap的模态框大小
背景 项目遇到一个需求,一个大表格放到模态框中,总是会出现撑开的效果,换了文档最大的modal-lg样式还不能解决,原因就是官方不支持更大号的模态框,需要自定义. 经过尝试理解,总结出调整模态框大小通 ...
- C++进阶(位图+布隆过滤器的概念和实现+海量数据处理)
位图 概念 位图: 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景.通常是用来判断某个数据存不存在的. 适用场景: 如果我们需要对大量的数据进行处理,判断该数据在不在,比如40 ...
- [编程基础] C++多线程入门10-packaged_task示例
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 10 pa ...
- Jupyter Notebook入门指南
作者:京东科技隐私计算产品部 孙晓军 1. Jupyter Notebook介绍 图1 Jupter项目整体架构 [https://docs.jupyter.org/en/latest/project ...
- Python简单api实现
flask 作用及简单使用 Flask的简单介绍及使用方法简介_珂鸣玉的博客-CSDN博客_flask 简单api搭建 import flask api = flask.Flask(__name__) ...
- Java解题练习
Java解题练习 1.A+B问题 解题代码: import java.util.*; public class Main { public static void main(String[] ar ...
- Educational Codeforces Round 33 (Rated for Div. 2) 虚拟赛体验
前言 就只做出了 \(A,B,C,D\) 是不是很弱? A.Chess For Three A,B,C 三人下棋,A和B先下,每次下完棋之后由现在观战的人(例如第一局就由C)代替下输的人. 每次输入一 ...
- git操作失误,提交代码因为网络问题没有成功,然后操作时候点错按钮导致代码全部没有了,也没用备份,如何解决
最好的提交代码办法, 1.先创建一个空文件夹, 2.然后创建一个在线仓库 3. git remote add origin '仓库地址' 4.查看远程仓库 git remote remove orig ...