「docker实战篇」python的docker爬虫技术-appium+python实战(18)

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:「docker实战篇」python的docker爬虫技术-appium+python实战(18)

上次通过appium进行了,录制脚本的功能,而且还可以进行转换成python,java,js等等语言的,这次实战下,从登陆,到进入某个页面操作获取信息。
源码:https://github.com/limingios/dockerpython.git

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

流程代码

1.点击跳过导航页面,进入登录页面
2.输入用户名和密码,点击登录
3.进入页面点击同意,点击研迅
4.模拟手势,上移

  • 准备工作
    1. 安装【考研帮】

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

2.设置-应用-点击【考研帮】-清除数据

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

  1. 启动【考研帮】

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

  1. 启动直接adb中的uiautomatorviewer.bat 记得看看下载源码包里面的增强版

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

5.看到uiautomatorviewer 和 夜神模拟器

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

6.appium启动

「docker实战篇」python的docker爬虫技术-appium+python实战(18)

  • 编写代码

#!/usr/bin/env python

-- coding: utf-8 --

@Time : 2019/1/22 20:15

@Author : Aries

@Site :

@File : yankao.py

@Software: PyCharm

#pip3 install Appium-Python-Client
import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
cap = {
"platformName": "Android",
"platformVersion": "5.1.1",
"deviceName": "127.0.0.1:62001",
"appPackage": "com.tal.kaoyan",
"appActivity": "com.tal.kaoyan.ui.activity.SplashActivity",
"noReset": True
}

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

def get_size():
x = driver.get_window_size()['width']
y = driver.get_window_size()['height']
return(x,y)

#导航点击跳过
try:
#是否跳过
if WebDriverWait(driver,3).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.TextView[1]")):
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.TextView[1]").click()
except:
pass

try:
if WebDriverWait(driver,3).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]")):
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]").send_keys("idig8")
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.EditText[2]").send_keys("3989441")
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.Button[1]").click()
except:
pass

#隐私协议
try:
#隐私协议
if WebDriverWait(driver,3).until(lambda x:x.find_element_by_xpath("//android.widget.TextView[@resource-id='com.tal.kaoyan:id/tv_agree']")):br/>driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.tal.kaoyan:id/tv_agree']").click()
driver.find_element_by_xpath("//android.support.v7.widget.RecyclerView[@resource-id='com.tal.kaoyan:id/date_fix']/android.widget.RelativeLayout[3]").click()
except:
pass

#点击研讯
if WebDriverWait(driver,3).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[2]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[3]/android.widget.LinearLayout[1]/android.widget.ImageView[1]")):
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[2]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[3]/android.widget.LinearLayout[1]/android.widget.ImageView[1]").click()

l = get_size()

x1 = int(l[0]*0.5)
y1 = int(l[1]*0.75)
y2 = int(l[1]*0.25)

#滑动操作
while True:
    driver.swipe(x1,y1,x1,y2)
    time.sleep(0.5)


注意点:
1.xpath 通过uiautomatorviewer 点击查看

![](https://upload-images.jianshu.io/upload_images/11223715-a88d201baa566c1b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2.python在运行过程中如果进行uiautomatorviewer加载会报错
3.python在使用的过程中需要先引入
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
4.前提是启动的appium:提示:The server is running

![](https://upload-images.jianshu.io/upload_images/11223715-b173c522071c521b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5.里面有几个需要注意的套路:

>appium服务的远程调用

webdriver.Remote("http://localhost:4723/wd/hub",cap)

>判断xpath是否存在

if WebDriverWait(driver,3).until(lambda x:x.find_element_by_xpath("'路径")):

>输入框复制

 driver.find_element_by_xpath("路径").send_keys("填入数据")

>按钮点击

 driver.find_element_by_xpath("路径").click()

>模拟手势上啦,先获取屏幕的宽高,然后通过driver.swipe(x1,y1,x1,y2) 从指定的(x1,y1)坐标到(x2,y2)

def get_size():
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return(x,y)

l = get_size()
x1 = int(l[0]*0.5)
y1 = int(l[1]*0.75)
y2 = int(l[1]*0.25)
driver.swipe(x1,y1,x1,y2)

PS:最后实现了如何从登陆到点击研迅,模拟手指,拉下加载的功能。

转载于:https://blog.51cto.com/12040702/2401155

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您的问题是关于DockerAppiumPython的组合,我理解的意思是您想在Docker容器中运行Appium测试脚本,使用Python编写这些脚本。是这样吗? 如果是这样,您需要使用Docker来创建一个容器,该容器中包含了AppiumPython所需的依赖项和配置。然后,您可以在该容器中运行您的Appium测试脚本。 以下是一个简单的示例Dockerfile,用于创建一个包含AppiumPython依赖项的Docker容器: ``` FROM python:3.7-slim-buster RUN apt-get update && \ apt-get install -y curl && \ curl -sL https://deb.nodesource.com/setup_12.x | bash - && \ apt-get install -y nodejs && \ npm install -g appium WORKDIR /app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "appium_test.py"] ``` 该Dockerfile中使用了Python 3.7作为基础镜像,并安装了Appium和必要的依赖项。然后,它将工作目录设置为/app,并将应用程序代码复制到容器中。最后,它命令容器运行appium_test.py脚本。 您可以将您的Appium测试代码放在与Dockerfile相同的目录中,然后使用以下命令构建Docker镜像: ``` docker build -t my_appium_image . ``` 这将使用Dockerfile构建一个名为“my_appium_image”的镜像。 然后,您可以使用以下命令在容器中运行Appium测试: ``` docker run --rm my_appium_image ``` 这将启动一个新的容器,并在其中运行您的Appium测试脚本。当测试完成后,容器将自动删除。 希望这可以帮助您开始使用DockerAppiumPython编写测试脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值