IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Python Appium配置的一些坑和经验分享 -> 正文阅读

[移动开发]Python Appium配置的一些坑和经验分享

最近朋友跟我说可能要接一个 App爬虫的的单子,怀着兴奋激动(bu han chan)的心情,我打开CSDN搜索如何配置Python Appium的相关教程,踩了很多的坑,准备和大家一起分享一下。

准备篇

首先我们需要配置Android SDK(iOS没试,因为没有设备),因为我这个人比较的喜欢IDE(lan),所以我直接选择下载一个Android Studio来安装我们的Android SDK。访问Android Studio官网来下载:

Download Android Studio and SDK tools ?|? Android Developershttps://developer.android.google.cn/studio/

?下载好后打开Android Studio,找到settings --> system settings --> Android SDK

?

?按照上图配置好SDK保存路径以及安装的版本后,点击Apply按钮安装。

安装好我们的SDK后记得配置一下环境变量(因为Appium会自动读取环境变量以检验JDK和SDK-Tools的安装),因此我们需要创建如下变量:

配置好后打开PowerShell检查一下:

?确认好上述东西可以开始下载Appium驱动了,这里不建议使用1.20版本以上的Appium,因为如何你需要对XML(ui)进行即时的元素查看的话,你需要去独立的安装Appium Inspector(ui检查器),而这个东西是在1.20以下版本是被集成在原生Appium里的,无需单独下载。

Appium github下载链接:https://github.com/appium/appium-desktop/releases/latesticon-default.png?t=LA92https://github.com/appium/appium-desktop/releases/latest

下载好的Appium是安装C盘里的,这个是无法更改的。

打开后的驱动涨这个样子:

?一般情况下我们只使用精简模式就足够了,保留默认配置启动服务器。

启动后的Appium Log长这样:

?好了,到这里准备工作就完成了。

实战篇

对安卓有点了解的小伙伴应该知道:Android的APP基本元素包含Activity和UI XML。那么,如果我去爬虫,我怎么去定位到我想要爬取的元素呢?这里就用到我们之前提到过的Appium Inspector了。

有主意发现上面Log Shell里的一个放大镜吗,那就是我们要用的UI检查器。

点开它,你能看到这样的画面:

?可是这样干启动会话是根本启动不了我们的UI检查器的,它会抛出这样的异常:

这是因为我们没有指定启动配置,那么我们该怎么配置我们的连接呢?

首先点击自动设定按钮,这时Appium会弹出这样的对话框:

?因为我们刚才在启动Appium服务的时候是以localhost来启动的,所以这里Appium自动识别到了。

当然这种情况下还不能启动会话,因为它又会抛出这样的异常:

这是因为你没有指定Appium以哪一种内核类型去连接设备,以及你没有指定设备的名称、动画以及自动化时发生异常时的指令超时等等配置项。

所以我在这里为大家列举了一份启动json:

{
    "platformName": "Android",//平台名称
    "platformVersion": "11",//系统版本
    "deviceName": "pyxis",//设备名称,可以随便写(但这里建议用adb识别的结果
    "unicodeKeyboard": true,//是否启动unicode键盘以进行自动化
    "resetKeyboard": true,//是否重置键盘
    "noReset": true,//这个没太搞懂
    "newCommandTimeout": 6000,//当新指令信号发送到安卓设备时,Appium最大的等到超时为多长时间(以毫秒为单位)
    "automationName" : "UiAutomator2"//指定动画
}

将其复制到我们下面的JSON Representation里并保存:

可以看到Appium已经读取我们的配置项了,这个时候我们就可以启动我们的会话了。

?在创建连接会话时,Appium会要求你安装如下的驱动组件:

?

一个是appium的uiautomator2的测试服务,一个是主服务,切记一定要安装,否则Appium是拿不到数据的。

安装好之后,UI检查器就是如下的样子:

这样我们就可以向Selenium一样来定位我们想要的元素对象了。

讲完了UI部分,我们也需要Activty来对我们的APP进行控制,那么,该怎么操作呢,没错这个时候就需要ADB(Android Debug Bridge)工具了

使用如下的指令可以获取到我们想要的APP锁对应的activity:

adb shell monkey -p package_name -v-v-v 1

可以看到,这里就是我们想要的activity:

?好的,以上与代码相关的部分就介绍完了,接下来讲讲我在配置时遇到的坑。

踩坑篇

1.”Session Not Created“,像这种错误有一种可能是因为你的手机并没有获取到权限,这个时候该怎么办呢?

首先在确保你的手机有开启开发者模式的情况下,以小米手机为例(本人小米CC9),打开开发者模式下的这些设置:

?打开这些设置后以防万一,我们最好重启一下再连接adb。

2."C:\Program Files\Java\jdk-17.0.1" is not xxx,is it installed ?

? ? ?这个问题的指向对象就很明显了,是指你的JAVA配置出现了问题,因此你需要检查你的JAVA_HOME是否配置正常。

3.切记不要在pip中安装uiautomator2和weditor!!!

具体是因为什么我也不清楚是为什么,但是实话这么搞它就会报错,因此,千万别装!!!

4."远程主机关闭了访问"?不用看了,这是因为你Appium服务没启动或者掉了。

---------------------------------------------------------------------------------------------------------------------------------好的,以上就是本次Appium配置分享的全部内容了,喜欢或者觉得有用记得给我点个赞,我是Deahost,下期见。

最后附上一个自动刷抖音的脚本送给大家,有需要的可以自行复制运行:

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time
from random import randint
action = TouchAction()

timehold = int(input("请输入浏览时长:"))
swipe_duration = float(input("请输入滑动时长:"))
desired_caps = {
    "platformName": "Android",
    "platformVersion": "11",
    "deviceName": "pyxis",
    "appPackage":"com.ss.android.ugc.aweme",
    "appActivity":".splash.SplashActivity",
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    "noReset": True,   
    "newCommandTimeout": 6000,
    "automationName" : "UiAutomator2"
}

driver = webdriver.Remote("http://localhost:4723/wd/hub",desired_capabilities=desired_caps)

def get_size():
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return (x,y)
def swipe(time_hold:int,duration:int) -> None:
    screen = get_size()
    time.sleep(time_hold)
    driver.swipe(screen[0] * 0.5,screen[1] * 0.75,screen[0] * 0.5,screen[1]*0.25,duration)
time.sleep(3)
while True:
    try:
        driver.implicitly_wait(randint(1,3))
        like_button = driver.find_element_by_id("ck8")
        action.tap(like_button,count=2)
        swipe(time_hold=timehold,duration=swipe_duration)
    except Exception as Error:
        print(f"[Error] 不是一个有效短视频,可能是直播,尝试滑动")
        swipe(time_hold=0,duration=swipe_duration)

 

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:35:55  更:2021-12-24 18:36:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:44:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码