「docker實戰篇」python的docker爬蟲技術-appium+python實戰(18)
上次通過appium進行了,錄製指令碼的功能,而且還可以進行轉換成python,java,js等等語言的,這次實戰下,從登陸,到進入某個頁面操作獲取資訊。
原始碼:https://github.com/limingios/dockerpython.git
流程程式碼
1.點選跳過導航頁面,進入登入頁面
2.輸入使用者名稱和密碼,點選登入
3.進入頁面點選同意,點選研迅
4.模擬手勢,上移
- 準備工作
- 安裝【考研幫】
2.設定-應用-點選【考研幫】-清除資料
- 啟動【考研幫】
- 啟動直接adb中的uiautomatorviewer.bat 記得看看下載原始碼包裡面的增強版
5.看到uiautomatorviewer 和 夜神模擬器
6.appium啟動
- 編寫程式碼
\#!/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 點選檢視
2.python在執行過程中如果進行uiautomatorviewer載入會報錯
3.python在使用的過程中需要先引入
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
4.前提是啟動的appium:提示:The server is running
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()
0.5)
0.75)y2 = int(l[1]*0.25)
driver.swipe(x1,y1,x1,y2)
PS:最後實現瞭如何從登陸到點選研迅,模擬手指,拉下載入的功能。
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:已是最新文章