如何使用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循环语句

    while循环 一般形式: while condition:   statement1 else:   statement2   a = 0 while a < 3: print(a) a = a + 1 else: print(a, ” 大于或等于3″) 结果为: 0 1 2 3 大于或等于3   无限循环: while True: # 或者一个永远…

    Python开发 2023年4月2日
    00
  • pythonFile方法

    open()方法用于打开一个文件,并返回文件对象,注意最后一定要关闭文件对象,即调用close()方法 一般形式为: open(file, mode= , buffering= , encoding= , errors= , newline= , closefd= , opener= )   参数说明: file: 必需,文件路径(相对或者绝对路径) mod…

    Python开发 2023年4月2日
    00
  • python面向对象

    传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,…

    Python开发 2023年4月2日
    00
  • 如何用html写书

    原理:利用xml.etree.ElementTree对html进行解析和写入 # encoding=utf-8import xml.etree.ElementTree as ET # 解析html、xmlname = input(‘type in file name:’)def circle(): tree = ET.parse(f'{name}.html’…

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

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

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

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

    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输入和输出

    输出 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
合作推广
合作推广
分享本页
返回顶部