appium自动爬取数据

news2025/2/23 19:04:16

爬取类容:推荐知识点中所有的题目

爬取方式:appium模拟操作获取前端数据

入门级简单实现,针对题目和答案是文字内容的没有提取出来

适用场景;数据不多,参数加密,反爬严格等场景

 

from appium import webdriver
import time
import xlwt
# 定义夜神模拟器的 IP 地址和端口号
from selenium.common.exceptions import NoSuchElementException

desired_caps = {
    #移动设备平台
    'platformName': 'Android',
    #平台OS版本号,写整数位即可
    'platformVersion':'7.0.5.8',
    #设备的名称--值可以随便写
    'deviceName': '夜神模拟器',
    #提供被测app的信息-包名,入口信息:
    #adb shell dumpsys window | findstr mCurrentFocus
    'appPackage': 'me.hxyfj.rk',
    'appActivity': 'com.uzmap.pkg.EntranceActivity',
    #确保自动化之后不重置app
    'noReset': True,
    'unicodeKeyboard': True,
    'resetKeyboard': True,
    #设置session的超时时间,单位秒,默认60s
    'newConnabdTineout':6000,
}

# 连接到夜神模拟器
# 初始化driver对象,用于控制手机,启动被测应用
# IP:appium-server所在机器的网络IP地址;port:监听的端口号;path固定/wd/hub
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)
# 获取屏幕宽度
width = driver.get_window_size()['width']
# 获取屏幕高度
height = driver.get_window_size()['height']
anwers = ["A","B","C","D"]
topics = ["序号","题目","A","B","C","D","答案","解析"]

#创建存储的excel
workbook=xlwt.Workbook(encoding='utf-8')

#根据题目类别列表
def get_questions(question_lists,content_name):
    #excel每个类别创建一个sheet
    booksheet=workbook.add_sheet(content_name)
    for i in range(len(topics)):
        booksheet.write(0,i,topics[i])
    for i in range(len(question_lists)):#len(question_lists)
        #题目处理----题目有2种方式
        question_singles = ''
        myanwers = ""
        try:
            question_texts = driver.find_elements_by_xpath("//android.view.View[@resource-id='question_list']/android.view.View[@index='"+str(i)+"']/android.view.View[1]/android.widget.TextView")
            for question_single in question_texts:
                question_singles = question_singles+question_single.get_attribute("text")
            if question_singles.strip() == '':
                raise NoSuchElementException('NoSuchElementException')
            # print("try"+str(i)+question_singles)
        except NoSuchElementException as e:
            question_texts = driver.find_elements_by_xpath("//android.view.View[@resource-id='question_list']/android.view.View[@index='"+str(i)+"']/android.widget.TextView")
            for question_single in question_texts:
                question_singles = question_singles+question_single.get_attribute("text")
            # print("except"+str(i)+question_singles)
        # print(i)
        # print(question_singles)
        booksheet.write(i+1,0,i+1)
        booksheet.write(i+1,1,question_singles)
        #答案数据处理
        for j in range(len(anwers)):
            question_anw = driver.find_element_by_xpath("//android.view.View[@resource-id='question_list']/android.view.View[@index='"+str(i)+"']/android.view.View[@clickable='true']["+str(j+1)+"]/android.widget.Image").text
            question_anwts = driver.find_elements_by_xpath("//android.view.View[@resource-id='question_list']/android.view.View[@index='"+str(i)+"']/android.view.View[@clickable='true']["+str(j+1)+"]/android.widget.TextView")
            question_anwall = ''
            for question_anwt in question_anwts:
                question_anwall = question_anwall+question_anwt.get_attribute("text")
            # print(anwers[j])
            # print(question_anwall)
            if question_anw == "ic_exam_answer_true":
                # print("答案:"+anwers[j])
                myanwers = anwers[j]
            #写入A,B,C,D四个选项
            booksheet.write(i+1,j+2,question_anwall)
        #写入答案
        booksheet.write(i+1,6,myanwers)
    workbook.save('choice_question.xls')
# driver.find_element_by_xpath("//android.view.View[@resource-id='content-list']/android.view.View[3]").click()
# time.sleep(2)

#外层科目类别
content_lists = driver.find_elements_by_xpath("//android.view.View[@resource-id='content-list']/android.view.View[@clickable='true']")
for i in range(len(content_lists)):
    time.sleep(1)
    content_name = driver.find_element_by_xpath("//android.view.View[@resource-id='content-list']/android.view.View[@clickable='true']["+str(i+1)+"]/preceding-sibling::android.view.View[1]/android.view.View[2]").text
    driver.find_element_by_xpath("//android.view.View[@resource-id='content-list']/android.view.View[@clickable='true']["+str(i+1)+"]").click()
    time.sleep(1)
    driver.find_element_by_xpath("//android.view.View[@resource-id='mode']/android.view.View[2]").click()
    time.sleep(1)
    question_lists = driver.find_elements_by_xpath("//android.view.View[@resource-id='question_list']/android.view.View")
    get_questions(question_lists,content_name)
    driver.keyevent(4)
    time.sleep(1)
    #向下滑动,显示出底下的类别
    if i == 4:
        driver.swipe(width * 0.5, height * 0.9, width * 0.5, height * 0.1, 1000)
    time.sleep(1)




# 关闭夜神模拟器
driver.quit()

结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序开发:开发框架与工具的使用指南

引言 本文以微信小程序为例介绍了小程序开发框架与工具的使用,通过本文的阅读,相信大家能够简单了解小程序开发的基本流程和常用工具,从而快速上手小程序开发。 文章目录 引言一、小程序开发框架与工具简介1.1 小程序开发框架1.2 小程序开发工…

百度文心大模型,彻底火了!丨IDCF

IDC报告显示,百度稳居中国深度学习平台市场综合份额第一。 根据中国信通院发布的《深度学习平台报告(2022)》,飞桨是中国深度学习市场应用规模第一的深度学习框架和赋能平台。通过飞桨与文心协同优化,文心大模型3.5,在14个参评模…

CSS 滚动条

一、滚动条样式属性 ::-webkit-scrollbar {width: 6px; /* 竖向滚动条宽度 */height: 6px; /* 横向滚动条高度 */ }::-webkit-scrollbar-thumb {border-radius: 10px; /* 滚动条样式 */-webkit-box-shadow: inset 0 0 3px red; /* 内阴影 */background-color: blue; /* 滚动条…

SpringBoot使用RestTemplate发送http请求(实操版)

前言 查看此文章前强烈建议先看这篇文章:Java江湖路 | 专栏目录 该文章纪录的是SpringBoot使用RestTemplate发送http请求,每一步都有记录,争取每一位看该文章的小伙伴都能操作成功。达到自己想要的效果~ 文章目录 前言1、SpringBoot调用外部…

RabbitMQ(二)

二、高级特性、应用问题以及集群搭建 高级特性 1.消息的可靠性投递 在使用RabbitMQ的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 rabbitMQ整个消息投递的路径为: produ…

mysql-入门笔记-3

# ----------排序查询-------- # 语法 # select 字段列表 from 表名 order by 字段1 排序方式1 ,字段2 排序方式2 ; DESC 降序 ASC升序 # 1 根据年龄对公司的员工进行升序排序---默认升序-黄色提示代码冗余 select * from userTable order by age ASC ; # 2 根据入职时间,对员…

LPython:最新的高性能Python实现、速度极快且支持多后端

LPython 是最新的开源 Python 实现,目标是打造高性能版本的 Python。 LPython 官网写道,它一直作为 Python 编译器在开发,能够生成优化的机器代码。LPython 的后端支持 LLVM、C/C 翻译,甚至还支持 WebAssembly (WASM)。 LPython 主…

CGAL-几何对象基础判断-点线段使用-hello world

文章目录 1.概述2.点和线段3.点序列的凸包3.1.内置数组中点的凸包3.2.向量中点的凸包 4.关于kernel和Traits类5.概念和模型 1.概述 本教程是为CGAL新手,大概知道c和几何算法的基本知识。第一部分展示了如何定义点和段类,以及如何在它们上应用几何谓词。…

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁,如何维护微服务之间的接口调用关系? API接口在设计的时候需要大量的需求文档,而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具:Swagger:Swag…

云主机OOM宕机原因分级及处理

一、故障现象 某次服务器告警宕机故障,无法ssh连入,控制台登录后查看,发生OOM事件,OOM就是我们常说的Out of Memory内存溢出,它是指需要的内存空间大于系统分配的内存空间,导致项目程序crash,甚…

【MySQL】使用C/C++连接MySQL数据库

【MySQL】使用C/C连接MySQL数据库 验证使用select特殊点 本文目的&#xff1a;使用MySQL提供的CAPI完成对数据库的操作 验证 #include <iostream> #include <mysql/mysql.h>int main() {std::cout<<"mysql cilent version: "<<mysql_get_cl…

面试热题100(二叉树的右视图)

给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 树这类问题用的最多的就是递归&#xff0c;因为树具有天然的递归结构&#xff1a; 我们来分析一下题目&#xff0c;给定一棵树根结…

回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SO-CNN-GRU蛇群算法优化卷积门控循…

nvm安装和使用

公司不同系统用的node版本不一样&#xff0c;所以就需要安装多版本了&#xff0c;那么使用nvm来管理就大大方便了开发。 使用nvm有哪些好处呢 安装node很方便&#xff0c;只需要一条命令可以轻松切换node版本可以多版本node并存 需要注意的是安装之前先把原有的node给卸载掉…

24考研数据结构-线索二叉树的线索化

目录 数据结构&#xff1a;线索二叉树与线索化线索二叉树的定义线索化过程线索化的应用总结 5.3.2线索二叉树1. 线索二叉树的概念与作用2.线索二叉树的存储结构3. 二叉树的线索化1. 中序线索化2. 先序线索化3. 后序线索化 4. 线索树的寻找前驱后继的各种情况&#xff08;多理解…

向“数”而“深”,联想凌拓的“破局求变”底气何来?

前言&#xff1a;要赢得更多机遇&#xff0c;“破局求变”尤为重要。 【全球存储观察 &#xff5c; 热点关注】2019年2月25日&#xff0c;承袭联想集团与NetApp的“双基因”&#xff0c;联想凌拓正式成立。历经四年多的发展&#xff0c;联想凌拓已成为中国企业级数据管理领域的…

opencv-29 Otsu 处理(图像分割)

Otsu 处理 Otsu 处理是一种用于图像分割的方法&#xff0c;旨在自动找到一个阈值&#xff0c;将图像分成两个类别&#xff1a;前景和背景。这种方法最初由日本学者大津展之&#xff08;Nobuyuki Otsu&#xff09;在 1979 年提出 在 Otsu 处理中&#xff0c;我们通过最小化类别内…

C语言-------函数栈帧的创建和销毁------剖析描骨

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; &#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382;…

Talk | 新加坡国立大学博士生施宇钧:DragDiffusion-基于扩散模型的关键点拖拽图片编辑

本期为TechBeat人工智能社区第518期线上Talk&#xff01; 北京时间8月2日(周三)20:00&#xff0c; 新加坡国立大学博士生—施宇钧的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “DragDiffusion-基于扩散模型的关键点拖拽图片编辑”&#xff0c;他…

浅谈机器视觉

目录 1.什么是机器视觉 2.学习机器视觉需要掌握的知识 3.机器视觉的由来 4.机器视觉带来的福利 1.什么是机器视觉 机器视觉&#xff08;Computer Vision&#xff09;是人工智能领域中的一个分支&#xff0c;旨在通过模仿人类的视觉系统&#xff0c;使计算机能够理解和解释图…