一.session

#获取包名和acctivename
#这个工具在adk包里面
aapt.exe dump badging E:\Wandoujia_851097_web_seo_baidu_binded.apk
aapt.exe dump badging E:\Wandoujia_851097_web_seo_baidu_binded.apk |find “launchable-activity”

 寻找包名和activityname的另外一职中方式

C:\Windows\System32>adb shell
root@SM-G9350:/ # logcat |grep cmp=

  

  

2.python脚本驱动

from appium import  webdriver

cap={
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": "127.0.0.1:21533",
"appPackage": "com.mei.wood",
"appActivity": ".ui.SplashActivity",
"noReset": True
}
driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",cap)

淘宝列子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author tom import time
from appium import webdriver
from appium.webdriver.common import mobileby
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC desired_capabilities = {
'platformName': 'Android', # 系统
'deviceName': '127.0.0.1:21533', # 移动设备号
'platformVersion': '5.1.1', # 系统版本
'appPackage': 'com.taobao.taobao', # 操作的app
'appActivity': 'com.taobao.tao.welcome.Welcome', # 打开淘宝app首页
'unicodeKeyboard': True,
'resetKeyboard': True,
'dontStopAppOnReset': True,
'autoGrantPermissions': True,
'noReset': True,
'automationName': 'uiautomator2',
'newCommandTimeout': '', # 超时时间
# 'systemPort': '8202', # 端口号,操作不用设备使用不同端口号
# 'udid': 'xxxxxxxx', # 移动设备号
'command_executor': 'http://127.0.0.1:4723/wd/hub' # 和启动命令保持一致
} class AppiumDemo(object):
def __init__(self):
self.driver = webdriver.Remote(command_executor=desired_capabilities['command_executor'],
desired_capabilities=desired_capabilities)
self.by = mobileby.MobileBy()
#点击同意使用流量
# if self.driver.find_element_by_id("com.taobao.taobao:id/uik_mdButtonDefaultPositive"):
# self.driver.find_element_by_id("com.taobao.taobao:id/uik_mdButtonDefaultPositive").click()
# 点击同意使用协议
if self.driver.find_element_by_id("com.taobao.taobao:id/yes"):
self.driver.find_element_by_id("com.taobao.taobao:id/yes").click()
# # 点击更新
# if self.driver.find_element_by_id("com.taobao.taobao:id/update_button_accept"):
# self.driver.find_element_by_xpath("com.taobao.taobao:id/update_button_accept").click()
# 点击搜索框
self.wait_find_element(by_type=self.by.ID, value='com.taobao.taobao:id/home_searchedit').click()
# 点击店铺搜索
self.wait_find_element(by_type=self.by.XPATH, value='//android.widget.TextView[@text="店铺"]').click() def wait_find_element(self, by_type: str, value: str, driver: WebDriver = None):
"""
获取单个元素, 显式等待
:param driver: 驱动对象
:param by_type: 查找元素的操作
:param value: 查找元素的方法
:return:
"""
driver = driver or self.driver
if not driver:
return driver
try:
WebDriverWait(driver, 10).until(EC.visibility_of_element_located(locator=(by_type, value)))
return driver.find_element(by_type, value)
except:
# self.logger.warning(traceback.format_exc())
return False def wait_find_elements(self, by_type: str, value: str, driver: WebDriver = None):
"""
获取多个元素, 显式等待
:param driver:
:param by_type:
:param value:
:return:
"""
driver = driver or self.driver
if not driver:
return driver
try:
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(locator=(by_type, value)))
return driver.find_elements(by_type, value)
except:
return False def get_size(self, driver: WebDriver = None):
"""
获取屏幕大小
:param driver:
:return:
"""
driver = driver or self.driver
if not driver:
return driver x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return [x, y] def swipe_up(self, driver: WebDriver = None, _time: int = 1000):
"""
向上滑动
:param driver:
:param _time:
:return:
"""
driver = driver or self.driver
if not driver:
return driver
try:
size = self.get_size(driver)
x1 = int(size[0] * 0.5) # 起始x坐标
y1 = int(size[1] * 0.80) # 起始y坐标
y2 = int(size[1] * 0.30) # 终点y坐标
driver.swipe(x1, y1, x1, y2, _time)
return True
except:
return False def execute(self, seed):
#清空搜索框,输入我们要爬取的数据
self.wait_find_element(by_type=self.by.ID, value='com.taobao.taobao:id/searchEdit').clear().send_keys(seed['keyword'])
#点击搜索按钮
self.wait_find_element(by_type=self.by.ID, value='com.taobao.taobao:id/searchbtn').click()
#获取店铺列表
shop_list = self.wait_find_elements(by_type=self.by.ID, value='com.taobao.taobao:id/shopTitle')
for shop_info in shop_list:
shop_info.click()
# 点击全部宝贝
self.wait_find_element(by_type=self.by.XPATH, value='//android.widget.FrameLayout'
'[@content-desc="全部宝贝"]').click() for i in range(3):
# 获取这一屏的数据
item_list = self.wait_find_elements(by_type=self.by.ID, value="com.taobao.taobao:id/title")
for item_info in item_list:
print(item_info.text)
self.swipe_up() # 向上滑动
time.sleep(0.5) # 一定要延时
self.driver.back() # 返回上一级
self.driver.back() def main():
seed = {
'keyword': 'Python 书'
}
spider = AppiumDemo()
while True:
spider.execute(seed=seed) if __name__ == '__main__':
main()

appnium适应之配置的更多相关文章

  1. Appnium移动自动化框架初探

    作者:cryanimal QQ:164166060 本文简要介绍了appnium自动化框架的架构.加载流程.支持语言.相关配置,以及元素定位工具等. 官方网站: http://appium.io Ap ...

  2. 3.Appnium的安装

    Appnium:移动端的自动测试话工具,类似selenium,可利用其驱动手机端去模拟点击.滑动.输入操作. 下载地址:https://github.com/appium/appium-desktop ...

  3. 【Appnium+C#+Winform自动化测试系列】一、获取本机连接的设备、启动多个Appnium和获取本机启动的Appnium

    本系列内容,准备根据所完成的项目为基线,一步一步的把整个设计和实现过程梳理. 先从基本的一些环境问题入手,梳理清楚关于手机设备和Appnium.因为我们在后面的建立Appnium连接时,需要设备名字和 ...

  4. Mac下Appnium的Android的UI自动化环境搭建

    1. 安装jdk:略 检查是否安装:执行命令java -version admindeMacBook-Pro-2:~ $ java -version java version "1.8.0_ ...

  5. (转)MitmProxy+APPnium安装使用

    MitmProxy+APPnium安装使用 2019年08月19日 11:09:48 jiageibuuuyi 阅读数 61更多 分类专栏: python学习笔记   版权声明:本文为博主原创文章,遵 ...

  6. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  7. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  8. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  9. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

随机推荐

  1. 企业框架-Spring

    1.什么是Spring Spring是最受欢迎的企业级Java应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring框架来创建性能好.易于测试.可重用的代码. Spring框架是一个开源的 ...

  2. mysql挖掘与探索--表操作命令 1

    1.登录数据库>mysql -u root -p 数据库名称 2.查询所有数据表>show tables; 3.查询表的字段信息>desc 表名称; 4.1添加表字段 alter t ...

  3. FPGA 浮点定点数的处理

    大纲: 1浮点数的格式指定 2浮点数的运算(加法) 3浮点数加减法器的实现(难于乘除法器的实现)  1. 在FPGA的设计中,浮点数的概念不同于C语言中的定义,这里的浮点数指的是小数点位置会发生变化的 ...

  4. QT .和::和:和->

    在学习C++的过程中我们经常会用到.和::和:和->,在此整理一下这些常用符号的区别.1.A.B则A为对象或者结构体2.A->B则A为指针,->是成员提取,A->B是提取A中的 ...

  5. sm1、sm2、sm3、sm4简单介绍

    转自:https://blog.csdn.net/andylau00j/article/details/54427395 国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥 ...

  6. Python中为什么可以通过bin(n & 0xffffffff)来获得负数的补码?

    一开始我以为这不是个大问题,因为本来整型数在内存中就是以补码的形式存在的,输出自然也是按照补码输出的,例如C语言中 printf("%X\n",-3); //输出 //FFFFFF ...

  7. 使用JS-SDK自定义微信分享效果

    前言 刚进入一家新公司,接到的第一个任务就是需要需要自定义微信分享的效果(自定义缩略图,标题,摘要),一开始真是一脸懵逼,在网上搜索了半天之后大概有了方案.值得注意的是一开始搜索到的解决方案全是调用微 ...

  8. 851. spfa求最短路

    给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 ...

  9. Maven和Ant简介以及两者的区别

    Maven 一.Maven简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 目前,绝大多数开发人员都把 Ant 当作 Java 编程 ...

  10. java虚拟机的运行原理

    一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 javac YourClassNam ...