如何使用appnium爬取视频数据

要先安装Appium,并用它来查找对应元素的id、xpath等信息

 

from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
from selenium.webdriver.common.by import By
import time
# 注意要在程序运行前打开Appium,否则程序会报错:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
DesireCaps = {
    'platformName': 'Android',
    'platformVersion': '11',  # 手机安卓版本
    'deviceName': 'MyLaptop',
    'appPackage': 'tv.danmaku.bili',  # appPackage名称
    # 查看应用包名:

    # 1、没有apk
    # 在手机上进入自己要操作的页面,然后在命令行窗口执行:adb shell dumpsys activity recents | find "intent={"
    # 就会产生:cmp=xxx/yyy……,xxx即为appPackage,yyy即为appActivity(只看第一行,下面的可能为其他包名),一般是:intent={……cmp=xxx/yyy……}
    # 2、有apk
    # aapt.exe的路径 dump badging 软件apk的路径 | find "package: name="(我这里的aapt.exe的路径为:D:\Appium\appium\androidsdk\build-tools\29.0.3\aapt.exe)
    # aapt.exe的路径 dump badging 软件apk的路径 | find "launchable-activity"

    'appActivity': '.MainActivityV2',  # appActivity名称(启动界面)  # 或者写成appPackage.appActivity
    'unicodeKeyboard': True,  # 使用自带输入法,需要输入除英文字符以外的字符
    'resetKeyboard': True,  # 执行完程序后恢复原来输入法
    'noReset': True,
    'newCommandTimeout': 6000,
    'automationName': 'UiAutomator2'

}
driver = webdriver.Remote('http://localhost:4723/wd/hub', DesireCaps)
# 第一次运行的时候手机会自动安装自动化代理
# 可根据id、ClassName、Accessibility、Xpath来定位元素
time.sleep(3)
driver.find_element(By.XPATH, '//android.widget.TextView[@content-desc="搜索"]').click()  # 注意要importBy
time.sleep(3)
driver.find_element(By.XPATH, '//android.widget.EditText[@content-desc="搜索查询"]').send_keys("onepiece")  # 后面不能直接加.press_keycode(AndroidKey.ENTER)。而是要另起一行
driver.press_keycode(AndroidKey.ENTER)  # 输入回车
time.sleep(3)
TextView1s = driver.find_elements(By.XPATH, """/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup/android.widget.TextView[1]""")
TextView2s = driver.find_elements(By.XPATH, """/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup/android.widget.TextView[2]""")
TextView3s = driver.find_elements(By.XPATH, """/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup/android.widget.TextView[3]""")
TextView4s = driver.find_elements(By.XPATH, """/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup/android.widget.TextView[4]""")
TextView5s = driver.find_elements(By.XPATH, """/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.LinearLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup/android.widget.TextView[5]""")
for i in list(range(5)):
    print(TextView1s[i].text)
    print(TextView2s[i].text)
    print(TextView3s[i].text)
    print(TextView4s[i].text)
    print(TextView5s[i].text)

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用appnium爬取视频数据 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • python迭代器和生成器

    iter()用于创建迭代器,next()用于输出迭代器的下一个元素: names = [‘微湘菜’, ‘小湘菜’, ‘大湘菜’, ‘巨湘菜’] iterName = iter(names) for i in range(4): print(next(iterName)) 结果为: 微湘菜 小湘菜 大湘菜 巨湘菜   创建一个迭代器需要在类中实现两个方法 __…

    Python开发 2023年4月2日
    00
  • python模块

    python模块是一个py文件,一个模块只会被导入一次   python在编译或安装的时候会确定搜索路径,使用import语句的时候,python解释器就从搜索路径(即一系列目录名)中查找模块 import sys print(sys.argv) # 命令行参数 print(sys.path) # 路径 结果为: [‘D:/Pycharm/pythonPro…

    Python开发 2023年4月2日
    00
  • python错误和异常

    Python 有两种错误很容易辨认:语法错误和异常   assert用于判断一个表达式,在表达式条件为 false 的时候触发异常: assert 1 == 1 assert 1 == 2 结果会报错: assert 1 == 2 AssertionError   语法错误,或者称之为解析错 比如: print(‘大湘菜’] 结果会报错: print(‘大湘…

    Python开发 2023年4月2日
    00
  • python运算符

    算术运算符: + – * / % ** //   比较运算符: == != > < >= <=   赋值运算符: = += -= *= /= %= **= //= :=(海象运算符)   其中海象运算符用于在表达式内部为变量赋值: name = ‘大湘菜’ if n := len(name) < 4: print(‘a nice…

    Python开发 2023年4月2日
    00
  • python基本数据类型

    python的变量不需要声明,但在使用前必须要赋值   多个变量赋值: a = b = c = 1 x, y, z = 1, True, ‘大湘菜’   python有六个标准的数据类型: Number、String、Tuple、List、Set、Dictionary,其中前三者为不可变数据,后三者为可变数据   Number: a, b, c, d = 1…

    Python开发 2023年4月2日
    00
  • python函数

    定义函数的一般格式: det function():   statements   return a return用于退出函数,向调用方返回一个表达式   函数可以不设置参数,也可以设置参数: def function1(): print(‘大湘菜’) def function2(a): print(a) function1() function2(‘小湘菜…

    Python开发 2023年4月2日
    00
  • python命名空间和作用域

    命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的   命名空间查找顺序:局部命名空间、全局命名空间、内置命名空间   相同的对象名称可以存在于多个命名空间中   作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问…

    Python开发 2023年4月2日
    00
  • python输入和输出

    输出 1、表达式语句 2、print() 3、write() 美化输出格式 repr()产生一个解释器易读的表达形式: a = ‘the sea has bank\nmy love is boundless’ print(a) print(repr(a)) # 可以转义特殊字符 结果为: the sea has bank my love is boundle…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部