「docker實戰篇」python的docker爬蟲技術-appium+python實戰(18)

上次經過appium進行了,錄製腳本的功能,並且還能夠進行轉換成python,java,js等等語言的,此次實戰下,從登錄,到進入某個頁面操做獲取信息。
源碼:github.com/limingios/d…java


流程代碼

1.點擊跳過導航頁面,進入登陸頁面
2.輸入用戶名和密碼,點擊登陸
3.進入頁面點擊贊成,點擊研迅
4.模擬手勢,上移python

  • 準備工做
  1. 安裝【考研幫】

2.設置-應用-點擊【考研幫】-清除數據android


  1. 啓動【考研幫】

  1. 啓動直接adb中的uiautomatorviewer.bat 記得看看下載源碼包裏面的加強版

5.看到uiautomatorviewer 和 夜神模擬器ios


6.appium啓動git


  • 編寫代碼
#!/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']")):
        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 點擊查看github


2.python在運行過程當中若是進行uiautomatorviewer加載會報錯
3.python在使用的過程當中須要先引入
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
4.前提是啓動的appium:提示:The server is runningweb


5.裏面有幾個須要注意的套路:docker

appium服務的遠程調用bash

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

判斷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:最後實現瞭如何從登錄到點擊研迅,模擬手指,拉下加載的功能。

相關文章
相關標籤/搜索