docker配置selenium环境和appium环境
-
拉取镜像
docker pull python:alpine3.6 docker pull selenium/standalone-chrome docker pull appium/appium
-
使用dockerfile安装第三方库
-
创建docker-dir文件夹,并在改文件夹下创建Dockerfile文件
-
在Dockerfile文件中编写以下代码,安装第三方库
FROM python:alpine3.6 # 安装gcc编译环境 RUN apk add --no-cache gcc musl-dev # 更新pip RUN pip install --upgrade pip # 下面模块的安装有的需要gcc编译环境 RUN pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install -i https://pypi.tuna.tsinghua.edu.cn/simple twisted && pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install aiohttp -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install appium-python-client -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装pyspider,用的到就装 RUN apk add --no-cache curl-dev libxml2-dev libxslt-dev zlib-dev libffi-dev openssl-dev && pip install pyspider -i https://pypi.tuna.tsinghua.edu.cn/simple # 安装scrapy,用的到就装 RUN apk add --no-cache libxml2-dev libxslt-dev zlib-dev libffi-dev openssl-dev && pip install scrapy==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 查看已安装的库 RUN pip list
-
-
使用docker-compose部署selenium爬虫项目
-
爬虫代码固定格式如下:selenium_test.py
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities import time time.sleep(5) # 这里的等待是等selenium完全启动,不然会报错,可自己优化(http://chrome:4444/wd/hub/status/) print("start !!!!") driver = webdriver.Remote( command_executor="http://chrome:4444/wd/hub", # 这里的chrome是使用docker-compose部署时的selenium服务的名称,如果是使用docker启动的selenium,请使用docker启动后容器的ip地址 desired_capabilities=DesiredCapabilities.CHROME ) # 上面是固定格式,下面可自行编写 driver.get('https://www.baidu.com') print(driver.title) with open('/data/baidu.html', 'w') as f: f.write(driver.page_source) print() # print(driver.page_source) driver.close()
-
编写docker-compose.yml
version: "3.6" services: spider: image: spider-dev volumes: - /root/code/selenium_test.py:/code/selenium_test.py - /root/data:/data command: python /code/selenium_test.py depends_on: - chrome chrome: image: selenium/standalone-chrome ports: - "4444:4444" shm_size: 2g
注意:上面spider服务的镜像是运行Dockerfile文件后,新构建的镜像名称,可自定义名称
-
-
使用docker-compose部署appinum爬虫项目
-
爬虫代码固定格式如下:appium_test.py
from appium import webdriver desired_caps = {} desired_caps["paltformName"] = "" # 操作系统 desired_caps["platformVersion"] = "" # 操作系统版本 desired_caps["deviceName"] = "" # 产品名称 desired_caps["appPackage"] = "" # app应用包的名称,不是app的名称 desired_caps["appActicity"] = "" # app应用包名称/后面的东西 往后下面看有教程 driver = webdriver.Remote( command_executor="http://appium:4723/wd/hub", # 这里的chrome是使用docker-compose部署时的selenium服务的名称,如果是使用docker启动的selenium,请使用docker启动后容器的ip地址 desired_capabilities=desired_caps )
-
编写docker-compose.yml
version: "3.6" services: spider: image: spider-dev volumes: - /root/code/appium_test.py:/code/appium_test.py command: python /code/appium_test.py depends_on: - appium appium: image: appium/appium ports: - "4723:4723" privileged: true volumes: - ~/.android:/root/.android - /dev/bus/usb:/dev/bus/usb
-
连接设备
docker exec -it container-appium adb devices
-
查找appPackage和appActicity
docker exec -it container-appium adb shell # 打开一个shell # 在新打开的shell中输入以下命令, 然后打开要查找的app logcat| grep ActivityManager # 找cmp, 斜杠前面的是appPackage后面的是appActicity
-
docker本地启动
docker run --privileged -d -p 4723:4723 -v ~/.android:/root/.android -v /dev/bus/usb:/dev/bus/usb --name appium appium/appium
-