经验拾忆(纯手工)=> Python版-Docker使用Appium简单实验

Docker-Appium安装

Github docker-appium地址 : https://github.com/appium/app…

创建临时容器(用于简单命令测试)

docker run --privileged -d -p 4723:4723 -v ~/.android:/root/.android -v /dev/bus/usb:/dev/bus/usb --name container-appium appium/appium

若使用模拟器等(非USB连接)

模拟器的adb将USB模式转为TCP连接方式:

adb -s 127.0.0.1:62001 tcpip 1119

远程Docker连接此模拟器:

docker exec -it container-appium adb connect 192.168.0.103:1119

查看虚拟设备是否连接成功

docker exec -it container-appium adb devices

若使用真机(USB连接)可直接使用如下配置

Dockerfile内容如下

FROM python
RUN pip install -i http://pypi.douban.com/simple \
    requests  retrying  appium-python-client --trusted-host pypi.douban.com

docker-compose.yaml内容如下

version: "3.7"
services:
  myspider:
    build: .
    volumes:
      - /root/mycode:/root/mycode
    command: python /root/mycode/1.py
    depends_on:
      - appium
  appium:
    image: appium/appium # 拉取镜像完成自动化全套配置
    ports:
      - "4723:4723"
    privileged: true
    hostname: appium
#    command: adb connect 192.168.0.103:1119
#    command:
#      - /bin/sh
#      - -c
#      - |
#        adb connect 192.168.0.103:1119
#        adb devices
#    entrypoint: adb connect 192.168.0.103:1119
    volumes:
      - ~/.android:/root/.android
      - /dev/bus/usb:/dev/bus/usb

爬虫脚本代码1.py如下

from appium import webdriver
from retrying import retry
import requests
import time

config = {}
config['platformName'] ='Android'
config['platformVersion'] = '7.1.1'
config['deviceName'] = '坚果 Pro 2'
config['noReset'] = True
config['appPackage'] = 'org.mozilla.firefox'
config['appActivity'] = 'org.mozilla.gecko.BrowserApp'
################### 查看 appPackage 和 appActivity #################
## 注意:
##     这两个值是针对某一软件的配置,你需要在手机上打开你这个软件,然后再执行此命令:
##     我此例就是用的 手机里面的火狐浏览器。
##     那么我首先需要,将火狐打开。
##     然后再执行如下命令才能查到想对应的配置。
##     否则,查的是你手机运行状态的主界面应用程序的配置信息
## 命令如下:
##     docker exec -it container-appium adb shell    # 进入 adb shell
##     dumpsys activity | grep mFocusedActivity       
##         返回结果  / 前面的是  appPackage  的值
##         返回结果  / 后面的是  appActivity 的值

@retry(
    stop_max_attempt_number = 1000000,
    stop_max_delay = 10*1000,
)
def verify_request():
    response = requests.get("http://appium:4723/wd/hub",timeout=0.5)
    print(response)
verify_request()

with webdriver.Remote(
    command_executor='http://appium:4723/wd/hub',
    desired_capabilities=config
) as driver:
    driver.get('https://tieba.baidu.com/index.html')
    time.sleep(5)

    with open('/root/mycode/test.html', 'w') as f:
        f.write(driver.page_source)
        print('写入成功')
    time.sleep(3)

前情链接

Pycharm 与 Docker 相关操作:https://segmentfault.com/a/11…

Docker 中 Selenium的使用: https://segmentfault.com/a/11…

    原文作者:Cython_lin
    原文地址: https://segmentfault.com/a/1190000020103800
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞