• windows下app爬虫环境搭建:python + fiddler + Appium + 夜神模拟器


    python、夜神模拟器自行下载安装

    1、安装java

    https://www.oracle.com/java/technologies/downloads/#jdk19-windows

    注意安装java8,不要像我一样如下图一样安装java19,新的不支持后面的uiautomatorviewer.bat运行,不然会闪退

    配置环境变量

    系统环境下:JAVA_HOME
    在这里插入图片描述
    在Path下添加

    %JAVA_HOME%\bin
    %JAVA_HOME%\jre\bin
    
    • 1
    • 2

    在这里插入图片描述
    CLASSPATH 注意:最前面有个【点】,一定不要漏掉!

    .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
    
    • 1

    在这里插入图片描述

    验证安装情况

    打开 cmd 命令行工具,输入 java -version,返回信息如图所示表示安装配置成功
    在这里插入图片描述

    2、安装 Android SDK Tools

    2.1 下载 Android SDK Tools

    http://tools.android-studio.org/index.php/sdk
    在这里插入图片描述

    2.2 安装 SDK Tools

    按提示进行安装,注意文件包的安装路径,如果C盘空间不够的话,后面可能会下载 packages 不成功,所以最好放到其他盘,如图我的安装:
    在这里插入图片描述

    2.3 安装 pacakge 包

    安装完成后打开后
    在这里插入图片描述
    先点击选中左侧的每个 packages 包,然后点击右侧的 Accept License,依次分别点选并接受,等全部 Packages 包都变成绿色对号以后,再点击 Install 进行安装;

    在这里插入图片描述
    注意:包很大,20多G,尽量用wifi,由于这些东西是在Google的服务器上下载的,可能会因网速下载失败,会跳出报错log,不过不影响下载进度,可以等待其他组件下载完成后再重新多下载几次那几个下载失败的
    等待全部安装完毕即可
    在这里插入图片描述

    如果一直下载失败,如上图,可以尝试换成其他有Android SDK的国内镜像服务器来下载安装,推荐几个镜像地址:
    1、中科院开源协会镜像站地址:
    IPV4/IPV6 : http://mirrors.opencas.ac.cn 端口:80
    2、北京化工大学镜像服务器地址:
    IPv4: http://ubuntu.buct.edu.cn/  端口:80
    IPv4: http://ubuntu.buct.cn/  端口:80
    IPv6: http://ubuntu.buct6.edu.cn/  端口:80
    3、大连东软信息学院镜像服务器地址:
    http://mirrors.neusoft.edu.cn  端口:80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    举一个例子,比如使用第三个大连东软的镜像地址,使用方法如下:
    在这里插入图片描述
    接着点击close,关闭对话框,再重新启动SDK Manager应该就会开始安装了。
    但是我的在下载android-R时一直报错,换下载地址也不行,但是应该不影响配置,可以先略过吧
    在这里插入图片描述

    2.4、替换 UIAutomator
    注意:之所以要配置 UIAutomator,是因为 Android SDK tools 包中原生的工具在获取元素时,不能很好地满足开发需求;
    
    • 1

    下载链接: https://pan.baidu.com/s/1BxcMt0bpbx8agH2ZNRAeYA
    提取码:i8n6

    在 \sdk\tools\lib* 目录下找到 uiautomatorviewer.jar,复制该文件的文件名,将改文件移动到其他文件夹,将下载的 uiautomatorviewer.jar 复制进文件包替换原来的文件。

    2.5 替换adb

    在 android-sdk\platform-tools 目录下找到 adb.exe,改名为adb_bak.exe
    在夜神模拟器安装目录的 bin 目录下找到 nox_adb.exe 文件,复制到 android-sdk\platform-tools 目录下,重命名为 adb.exe
    在这里插入图片描述

    在这里插入图片描述
    ADB 命令:

    adb devices  # 查看 adb 已连接的设备
    adb kill-server  # 关闭 adb 服务
    adb start-server  # 启动 adb 服务
    
    • 1
    • 2
    • 3
    2.6 配置 ANDROID 环境变量

    在系统环境变量添加 ANDROID_HOME,路径为 SDK 文件安装路径
    在这里插入图片描述
    在 Path 中添加如下

    %ANDROID_HOME%\tools
    %ANDROID_HOME%\platform-tools
    
    • 1
    • 2

    在这里插入图片描述

    3、安装 Appium

    3.1 下载安装Appium软件

    下载地址:https://github.com/appium/appium-desktop/releases
    在这里插入图片描述
    下载很慢,慢慢等待吧!

    在这里插入图片描述
    在这里插入图片描述
    默认的安装路径是在C:\Program Files\Appium Server GUI
    在这里插入图片描述
    然后点击桌面图标启动如下图:
    在这里插入图片描述
    在这里插入图片描述
    如下图所示表示安装成功:
    在这里插入图片描述

    3.2、安装Appium Inspector
    在Appium1.22.2中版本服务和元素查看器分家了,查看元素信息就必须下载Appium Inspector
    
    • 1

    1、点击InspectorMoved按钮会自动跳转到该网页:
    https://github.com/appium/appium-inspector
    在这里插入图片描述
    在这里插入图片描述

    2、点击Releases。
    在这里插入图片描述
    3、进入页面点击如下图下载
    在这里插入图片描述
    下载很慢,慢慢等待吧!
    安装后打开
    在这里插入图片描述

    在这里插入图片描述
    4、安装Appium-Python-Client
    cmd窗口输入:

    pip install Appium-Python-Client
    
    • 1

    在这里插入图片描述
    python进入命令行模式测试:

    from appium.webdriver.webdriver import WebDriver
    
    • 1

    在这里插入图片描述
    如图显示表示成功

    4、设置adb链接夜神模拟器

    1、夜神模拟器打开USB调试
    进入设置打开(没显示开发者选项的去版本里连续点击)
    在这里插入图片描述
    在这里插入图片描述
    2、打开adb链接模拟器
    执行如下命令:

    adb connect 127.0.0.1:62001
    
    • 1

    在这里插入图片描述
    查看链接情况:

     adb devices
    
    • 1

    在这里插入图片描述
    表示连接成功

    3、配置 app desired_caps
    获取 apk 包名(appPackage)、活动名(appActivity)等(这里我打开的是小红书)

    adb shell dumpsys activity activities
    
    • 1

    在这里插入图片描述
    – 得到下面的返回结果,appActivity 值为 com.xingin.xhs.index.v2.IndexActivityV2,app 的 appPackage 值为 com.xingin.xhs;
    – 这里注意:appActivity 返回值本来是 com.xingin.xhs/.index.v2.IndexActivityV2,需要 去掉中间的反斜线!

    打开模拟器,依次进入 设置 > 关于平板电脑,获取模拟器参数参数;
    在这里插入图片描述

    # 定义启动设备需要的参数
    desired_caps = {}
    # 设备系统
    desired_caps['platformName'] = 'Android'
    # 设备系统版本号        
    desired_caps['platformVersion'] = '5.1.1'
    # 设备名称
    desired_caps['deviceName'] = 'Meizu'
    ## 要测试的应用的地址
    #desired_caps['app'] = 'xxx.apk'   # 注意是 apk 文件在电脑上的绝对路径
    # 应用的包名
    desired_caps['appPackage'] = 'com.xingin.xhs'
    desired_caps['appActivity'] = 'com.xingin.xhs.index.v2.IndexActivityV2'   # appActivity 值需要去掉反斜线
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4、UIAutomator 获取元素位置
    在 sdk\tools\bin 目录下找到 uiautomatorviewer.bat 文件,双击打开运行 uiautomatorviewer
    在这里插入图片描述
    启动 uiautomatorviewer 后,点击左上安卓角手机图标连接安卓模拟器

    注意:每次操作 App 出现页面变换以后,如果出现下图报错,需要手动点击左上角安卓手机图标,才能够在 UIAutomator 同步页面;
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    将模拟器页面同步到 UIAutomator 之后,在模拟器打开 app ,再次点击左上角安卓手机图标,就可以在 UIAutomator 看到同步后的小红书 app 页面

    注意:如果出现如下报错,那就重新连接下
    
    • 1

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

    结果报错:
    在这里插入图片描述
    如果是京东app是可以的:
    在这里插入图片描述

    既然这样,那就不用官方的了,换第三方的(当然了,如果要爬的app没毛病用官方的也没问题):

    网上也有办法,下载新的tool工具,替换本地的tool
    step1 下载新的tools,http://www.android-studio.org/
    在这里插入图片描述
    step2、解压后替换电脑里已安装Android SDK 目录里的tools目录

    将原来的tools改个名字,不用删除,相当于备份,影响点就是根目录下的SDK Manager.exe暂时无法打开,点击以后黑屏一闪而过;然后将上面下载的sdk tools 解压复制到Android sdk根目录下
    在这里插入图片描述
    自行测试

    4.1 这里用官方的爬京东的试试
    此处展示 启动、输入关键字查询 两个动作的代码,请读者自行编写代码完成 app 操作
    编写代码:

    from appium import webdriver
    from appium.webdriver.common.touch_action import TouchAction
    import time
    
    
    class Jingdong():
        def __init__(self):
            desired_caps = {}
            # 设备系统
            desired_caps['platformName'] = 'Android'
            # 设备系统版本号
            desired_caps['platformVersion'] = '5.1.1'
            # 设备名称
            desired_caps['deviceName'] = '127.0.0.1:62001'
            ## 要测试的应用的地址
            #desired_caps['app'] = 'xxx.apk'   # 注意是 apk 文件在电脑上的绝对路径
            # 应用的包名
            desired_caps['appPackage'] = 'com.jingdong.app.mall'
            desired_caps['appActivity'] = 'com.jingdong.app.mall.main.MainActivity'
    
            self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)  # 地址为appium地址
            time.sleep(8)
    
        def search(self, keyword):
            self.driver.find_element_by_xpath('//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[2]/android.widget.LinearLayout[1]').click()
            time.sleep(3)
            self.driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[2]/android.widget.EditText[1]").send_keys(keyword)
            time.sleep(3)
            self.driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.TextView[1]").click()
            time.sleep(3)
    
    
    def main():
        jingdong = Jingdong()
        keyword = "手机"
        jingdong.search(keyword)
    
    if __name__ == '__main__':
        main()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    关闭adb服务

    adb kill-server
    
    • 1

    4.2 这里用第三方的 UiAutoMator2+web-editor
    https://github.com/alibaba/web-editor

    4.2.1 UiAutoMator2简介
    UIAutomator2是⼀种Android UI⾃动化框架,该框架优点:
    1.环境搭建便捷
    2.UI控件识别可视化好
    3.UI⾃动化编写采⽤python,学习成本低
    4.UI⾃动化脚本运⾏稳定
    缺点:
    存在设备兼容性问题,如:
    华为⼿机,⽆法通过IP离线执⾏UI⾃动化
    三星S8⼿机微信webview⻚⾯⽆法识别元素

    安装:pip install uiautomator2

    4.2.2、web-editor简介
    web-editor 类似于appium中的inspector;其功能也是⽤于元素定位调试

    2、安装

    pip install weditor
    
    • 1

    在这里插入图片描述
    如果安装报错,那就制定版本安装:pip install weditor==0.6.4
    下载安装比较慢,可以自己指定源安装

    如果实在想安装最新版本的,那就用这个命令从github下载安装:
    git clone https://github.com/openatx/weditor pip3 install -e weditor
    
    • 1
    • 2

    在这里插入图片描述
    如果想安装最新的不报错,那就去github下载,然后修改报错的文件:

    .eggs\pbr-5.11.0-py3.9.egg\pbr\packaging.py
    
    • 1

    打开,找到open方法,修改代码,添加encoding=‘utf-8’,
    如: with open(, ‘r’, encoding=‘utf-8’)
    保存,
    重新执行本地安装

    3、启动
    安装好之后,在终端直接输⼊ weditor 即可在默认浏览器中启动⼀个元素定位的调试界⾯,输入你的设备编码,点击Connect连接设备, Dump Hierarchy刷新同步设备界面
    在这里插入图片描述
    在这里插入图片描述
    如果页面提示python -m weditor,关闭终端重新打开输入提示命令运行即可
    在这里插入图片描述
    4、UiAutoMator2 + Web-editor 自动化使用

    4.1 点击右上角重置代码即可实例化
    在这里插入图片描述

    import uiautomator2 as u2
    
    d = u2.connect()
    
    • 1
    • 2
    • 3

    4.2 启动app

    d.app_start("想要启动app的包名")
    
    • 1

    4.3 选中想要操作的元素,右侧即可看见XPath路径,底部的代码也可以直接复制使用。同时也可以跟appium一样使用className、resourceId、text等定位方式。详细方式可以查看:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector

    我用的模拟器,好像识别的有问题,估计用真机可以

  • 相关阅读:
    提升设计性能的HDL编码方法
    二、枚举 enum
    es6(三)——常用es6(函数、数组、对象的扩展)
    Linux 命令(164)—— who 命令
    智慧安防解决方案-最新全套文件
    Linux使用正则匹配配置文件有效内容
    [CISCN2019 华东南赛区]Web11
    数仓日记 - 数据采集平台
    【OpenCV • c++】图像噪音 | 椒盐噪音 | 高斯噪音
    DiffuSEEG:一种基于stable diffusion 的SEEG数据补全方法
  • 原文地址:https://blog.csdn.net/s_daqing/article/details/127929863