移动端爬虫--单设备自动化(二)

文集 移动端网页端爬虫

单设备自动化

  • 准备

    假设软件环境都已配置

    一台android虚拟机, 我的是夜神端口是62025

  • 启动

    1. 连接设备

      [图片上传失败...(image-cd54b7-1532398731012)]

    2. 运行appium,默认启动4723端口

    移动端爬虫--单设备自动化(二)_第1张图片
    image

    [图片上传失败...(image-72a668-1532398731012)]

    备注:

    ​ 1) 设备提前装好app, appActivity和appPackage的值下面介绍

    ​ 2)deviceName: 如果是真机,填设备的型号(如我的华为畅享7: SLA-LA00)

    1. 审查元素

      [图片上传失败...(image-cc0a5d-1532398731012)]

      上图已经标记出了appPackage,至于appActivity指的是android app的入口activity组件,默认是MainActivity,可以通过反编译工(AndroidKiller)具查看。

    2. capability设置

      {
        "platformName": "Android",
        "automationName": "Appium",
        "platformVersion": "5.1.1",
        "appPackage": "com.ss.android.ugc.aweme",
        "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
        "noReset": "True",
        "deviceName": "Emulator"
      }
      

到此appium操控app成功。下面给出一段代码,使用python操控

# -*- coding: utf-8 -*-
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.touch_action import TouchAction


# the emulator is sometimes slow and needs time to think
SLEEPY_TIME = 1

desired_caps = {
  "platformName": "Android",
  "automationName": "Appium",
  "platformVersion": "5.1.1",
  "appPackage": "com.ss.android.ugc.aweme",
  "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
  "noReset": "True",
  "deviceName": "Emulator"
}
class App(object):

    def __init__(self):
        self.driver = webdriver.Remote('http://%s:%d/wd/hub' % ('127.0.0.1', 4723), desired_caps)
        self.wait = WebDriverWait(self.driver, 30)
        # {'width':w, 'height':h}
        self.window = self.driver.get_window_size()

    def set_up(self):
        id = self.driver.session_id
        print(id)

    def tear_down(self):
        self.driver.quit()

    def wait_element_clickable(self, locator):
        return self.wait.until(
            EC.element_to_be_clickable(locator)
        )

    def back(self):
        self.driver.back()

    def center(self, left_top, right_bottom):
        x = (left_top[0] + right_bottom[0]) / 2
        y = (left_top[1] + right_bottom[1]) / 2
        return x, y

    def click_by_xy(self, left_top, right_bottom):
        location = self.center(left_top, right_bottom)
        self.driver.tap([location], 200)

    def swip(self, x1, y1, x2, y2, duration=None):
        action = TouchAction(self.driver)
        action.press(x=x1, y=y1) \
            .wait(300) \
            .move_to(x=x2, y=y2) \
            .release() \
            .perform()

    def app_is_installed(self, app_package):
        self.driver.is_app_installed(app_package)

    @property
    def page_source(self):
        return self.driver.page_source

    def quit(self):
        self.driver.quit()


if '__main__' == __name__:
    t = App()

你可能感兴趣的:(移动端爬虫--单设备自动化(二))