一.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. mysql 优化配置和方面

    MySQL性能优化的参数简介 公司网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20 ...

  2. marry|psych up|make it|Fireworks|be to blame for|

    同位语从句 ADJ 结婚的;已婚的If you are married, you have a husband or wife. We have been married for 14 years.. ...

  3. RabbitMQ(1)——基础入门

    本文章写在了CSDN :https://blog.csdn.net/qq_30348181/article/details/87911398

  4. keepalive笔记之三:keepalived通知脚本进阶示例

    下面的脚本可以接受选项,其中: -s, --service SERVICE,...:指定服务脚本名称,当状态切换时可自动启动.重启或关闭此服务: -a, --address VIP: 指定相关虚拟路由 ...

  5. CodeFroces New Assignment 二分图匹配

    There is a class consisting of n students, in which each one has a number representing his/her perso ...

  6. 关于(Building tool)的认识以及当下流行的Building tool有哪些?

    1.Building tool是什么? (Building tool)构建工具是一种工具,它负责构建流程的所有内容,并自动化与构建项目相关的所有内容.它致力于以下任务: 生成源代码(如果在软件项目中使 ...

  7. 数据库中慎用float数据类型(转载)

    数据库中慎用float数据类型   大多数编程语言都支持float或者double的数据类型.而数据库中也有相同关键字的数据类型,因此很多开发人员也自然而然地在需要浮点数的地方使用float作为字段类 ...

  8. 吴裕雄--天生自然KITTEN编程:角色移动

  9. IOS常见语法解惑

    由于工作过程中经常需要查看IOS的Objective-C代码,遂把一些常见的.有疑问的OC语法列出,方便之后会看,提升效率. Objective-C中的@语法 @interface告诉编译器,我要声明 ...

  10. Laravel Study(使用 Laravel )

    開始 伺服器及相關工具安裝自行建立,在伺服器跟目錄下 有兩種方式建立 Laravel 專案,這裡使用 composer 建立專案 使用 composer 要在 PHP 5.3.2 以上才能使用 com ...