用Python+Appium自动写网课考试

今年疫情原因,在家上网课,开启了无聊的刷网课模式,不光在学习通上,MOOC上也有一门创新创业。
本来网课刷的好好的开两个页面双倍快乐,一会就可以刷完,可是居然还有测验。关键是测验的题目百度查不到,要么就是恶心的付费解锁。真巧我发现有一款APP基本啥网课答案都有,就打算用这个软件完成各章的测试。可是,这居然没有web网页版所以不能用requests模块批量提交解析。
问题是如果用手机的话,要一题一题复制粘贴,然后不停的切换页面太麻烦啦。所以想着在电脑上用模拟器完成。
那啥看了一眼,要实现上述要求要用到python的Appium-Python-Client模块等等。去学了一波。

学会了我们就开始!

需要的东西:

夜神模拟器、python3(pycharm)、appium、javaSDK、以及AndroidSDK

操作步骤

1、模拟器自行百度下载最新版本我用的夜神模拟器
2、安装java sdk 自行百度记得添加环境变量因为android sdk要依赖 java sdk 环境

安装验证:cmd输入javac如下图所示即安装成功在这里插入图片描述

3、下载Androidsdk建议下镜像版(因为正版要科学上网)并新建环境变量ANDROID_HOME,路径值为SDK文件所在位置

在这里插入图片描述在这里插入图片描述

(避坑指南:注意Android adb.exe和模拟器文件夹下的nox_adb.exe以及adb.exe版本要一样可以把Androidsdk adb.exe改个名字直接复制到模拟器里避免版本冲突)在这里插入图片描述在这里插入图片描述
在这里插入图片描述
然后添加完路径之后 win+r 输入cmd打开命令行,输入adb如果如下图所示表示安装成功。在这里插入图片描述
接下来打开模拟器,首先打开模拟器设置找到版本号连点7下打开开发者模式并打开USB调试选项
cmd输入指令:adb device,如图表示连接成功。
在这里插入图片描述

4、安装appuim (百度百度)

作为python操纵app的接口
附上原理图在这里插入图片描述

5、开始编写代码

我用的是xpath语法批量采集题目到一个txt然后按行对txt的内容进行处理,这只是单纯的前端并不会与服务器交互可以安心享用(抖机灵)在这里插入图片描述
在这里插入图片描述
下面直接贴上代码:没学过的建议看一下教程:
教程传送门:点我

from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
import time

desired_caps = {
  'platformName': 'Android', # 被测手机是安卓
  'platformVersion': '5', # 手机安卓版本
  'deviceName': '127.0.0.1:62001', # 设备名,安卓手机可以随意填写
  'appPackage': 'com.xuexiaoyi.xxy', # 启动APP Package名称
  'appActivity': '.MainActivity', # 启动Activity名称
  'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
  'resetKeyboard': True, # 执行完程序恢复原来输入法
  'noReset': True,       # 不要重置App
  'newCommandTimeout': 6000,
  'automationName' : 'UiAutomator2',
}

# 连接Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# 设置缺省等待时间
driver.implicitly_wait(15)


# 根据content-desc定位搜索输入框,点击
driver.find_element_by_accessibility_id('搜题').click()

file = open(r"C:\Users\Administrator\Desktop\imu.txt")
i = 0
for line in file:
  i = i + 1
  print(i, '、', line)
  #加个异常处理
  try:

    # 根据classname定位搜索框
    search = driver.find_elements_by_class_name('android.widget.EditText')[0]
    search.click()
    search.send_keys(line)

   #定义一个滑动屏幕的函数
    def up_swipe():
      time.sleep(1)
      driver.swipe(start_x=48, start_y=535, end_x=48, end_y=100)
      time.sleep(1)


    # 根据classname定位立即搜索按键
    sousuo = driver.find_elements_by_class_name('android.widget.TextView')[6]
    sousuo.click()
    up_swipe()
    time.sleep(1)

    print('*' * 50)
    ques = driver.find_elements_by_class_name('android.widget.TextView')[8]
    print(ques.text)
	#有的时候题目不一样长所以会多输出两个元素确保我们想要的题目在,无伤大雅觉得不好看的可以写一个替换函数
    anwser = driver.find_elements_by_class_name('android.widget.TextView')[9]
    anwser1 = driver.find_elements_by_class_name('android.widget.TextView')[10]
    anwser2 = driver.find_elements_by_class_name('android.widget.TextView')[11]

    print(anwser.text,anwser1.text,anwser2.text)
    print('*' * 50)

    #滑动回去
    driver.swipe(start_x=48, start_y=268, end_x=48, end_y=800, duration=800)
    clear = driver.find_elements_by_class_name('android.widget.TextView')[4]
    clear.click()
    time.sleep(1)
  except:
    print("本题需要手动搜寻答案")

file.close()

滑动的原因是答案的元素在下面,定位不到。所以需要滑动滑动记得加个延时函数避免出错。
在这里插入图片描述
然后就可以愉快的刷题啦耶耶耶!(小伙伴也可以把内容输出到一个txt文本中做可持续化这里就不展开了)

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
考试系统由前台考生考试部分和后台系统管理部分组成。 一、前台部分 1、 选择课程: (1)、考试部分 考试权限模式有两种:   1、课程管理员后台设定:由课程管理员在考生考试之前预先设定好每个的试卷 。   2、考生自己选择:考生在第一次登陆考试平台的时候,自己选择要参加的课程和试卷。 考试权限模式由最高管理员在后台设置。 考生要参加考试,必须满足几个前提: a.考生所在的有权限参加该试卷的考试。 b.该试卷呈“打开”状态。 c.该试卷所在课程呈“打开”状态。 d.该试卷所涉及的章节呈“打开”状态。 e.正好在试卷规定的时间内参加考试。 考生在考试过程中,应注意保存答案。试卷内每一种题型的后面都有一个保存按钮,只要考生做完此类型试题,应点击保存按钮。 试卷用倒计时方式扣减时间,如果考生在考试过程中不小心关闭窗口,可以重新进入考试系统,继续刚才的考试,以前保存的答案仍旧存在。 操作题一般来说用于信息化的考试,比如制作Word文档、Excel表格、网页制作等,考生在做完这些文件后上传到服务器上,等待管理员批改。具体上传参数,由最高管理员在后台设定。 在考试结束前一分钟和最后10秒种,系统会提示 考生保存答案,并提交试卷。    考试的次数由管理员或课程管理员设定。考生可以反复参加考试 (2)、竞赛部分 竞赛试卷可以由管理员出题,也可以由考生自由出题。考生在“练习部分”出“模拟试卷”的时候,可以把试卷类型设置为“竞赛”,让其他考生参加这份“模拟试卷”,进行竞赛。 (2)、练习部分 练习分两种:“分项练习”和“模拟试卷” “分项练习”:主要是针对各个章节,不同的题型进行练习。考生要参加练习,管理员或课程管理员必须首先在后台的“课程管理”——“练习管理”中设置好要练习章节的时间、状态。 练习时,以章为单位,按题型类别反复练习。只有在点击“本章已经练习完”之后,考生才可以在“查询成绩”中看到此章练习的标准答案和自己的答案。如果想再练习一次,请点击“重新练习”。       “模拟试卷”:考生可以按自己的想法出试卷,先设置试卷的属性,再设置各种题型的题量与分值,最后生成试卷。考生练习完即可查看成绩。 2、 成绩查询: (1)、考试部分 考生进入已经考过的试卷,可以了解每一种题型的得分情况。而且还可以深入了解到自己的答案与标准答案之间的差距。 因为试卷中的主观题需要课程管理员批改,可能需要一段时间才能查询到成绩。但如果试卷是由客观题型组成的,管理员或课程管理员就可以在后台的“试卷管理”——“查询方式”中,选择“考完查询”。这样,考生就可以在考试结束后立即看到自己的成绩了。 考生可以浏览整张试卷,并打印已经考过的试卷。 (3)、竞赛部分 和考试部分一样。 (2)、练习部分 “分项练习”只有在点击“本章已经练习完”之后,考生才可以在“查询成绩”中看到此章练习的标准答案和自己的答案。 3、 考试新闻  考生可以了解考试的相关信息,还可以看到公布的成绩。 二、后台管理部分 (一)、课程管理 1、课程管理: 课程分“专业课”、“公共课”和“基础课”。出试卷时,范围可以跨“公共课”。当本课程中如果有试卷呈“打开”状态时,请将此课程“打开”。 2、练习管理(章节管理): 用于设定练习的时间和状态,使用时必须为“打开”状态。如果想把题目录入到相应的章节,请在此添加章节序号。添加章节时必须输入数字,以防出错。“现有题量”显示了本章节所储存的“考试题”和“练习题”的总量。 3、试卷管理: 试卷类型分两类,随机试卷和人工出卷。随机试卷必须在“题型管理”中添加“题量”和“分值”。而人工出题的试卷在添加过程中需要从题库中选择试题,使试题呈“选中”状态,且在“题型管理”中只需填“分值”即可,系统会自动计算“题量”。 使用试卷时,务必把试卷“打开”。  “题型管理”中的“分值”,除阅读理解外,都是指每道题目的分值。因为阅读理解是以大题为单位选题或是抽题,而每个大题都有不确定个小题,所以大题的总分值无法统计,只能输入小题的“分值”。注意:一旦修改试卷的“题量”和“分值”,将会清空已经考过此试卷的考生数据。 课程管理员最好在考试之前设定好试卷的“题量”和“分值”。 答案的保存方式有两种:整体保存和分部保存。整体保存是考试过程中一次性保存所有题型的试题答案。分部保存是仅
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值