婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python爬蟲之Appium爬取手機App數據及模擬用戶手勢

python爬蟲之Appium爬取手機App數據及模擬用戶手勢

熱門標簽:地圖標注多個 B52系統電梯外呼顯示E7 高德地圖標注收入咋樣 銀川電話機器人電話 企業微信地圖標注 萊蕪電信外呼系統 鶴壁手機自動外呼系統違法嗎 沈陽防封電銷電話卡 怎么辦理400客服電話

Appium

在前文的講解中,我們學會了如何安裝Appium,以及一些基礎獲取App元素內容的方式。但認真看過前文的讀者,肯定在博主獲取元素的時候觀察到了一個現象。

那就是手機App的內容并不是一次性加載出來的,比如大多數Android手機列表ListView,都是異步加載,也就是你滑動到那個位置,它才會顯示出它的內容。

也就是說,我們前面爬取微博首頁全部信息的時候,如果你不滑動先加載一定的微博內容,也就如上圖所示,只能獲取2個微博內容。

模擬操作

所以,我們要實戰獲取微博內容的話,首先你需要學會如何模擬滑動屏幕操作。下面,我們來一一介紹屏幕的互動操作。

屏幕滑動

在Python的Appium-Python-Client包中,我們通過swipe()函數模擬用戶手勢從A滑動到B點,其具體的方法定義如下所示:

def swipe(self: T, start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0) -> T

start_x:開始位置的橫坐標

start_y:開始位置的縱坐標

end_x:結束位置的橫坐標

end_y:結束位置的縱坐標

duration:持續時間,也就是處于距離后生成滑動速度

當然,滑動的方法還有一個:flick(),它只有4個參數,缺少duration參數,也就是快速從某個位置滑動到指定的位置。

示例代碼:

from appium import webdriver
import time

server = "http://localhost:4723/wd/hub"
desired_caps = {
    "platformName": "Android",
    "deviceName": "liyuanjing",
    "appPackage": "com.sina.weibo",
    "appActivity": "com.sina.weibo.MainTabActivity",
}
driver = webdriver.Remote(server, desired_caps)
time.sleep(5)
el1 = driver.find_element_by_id("com.android.permissioncontroller:id/permission_allow_button")
el1.click()
time.sleep(5)
driver.swipe(500,500,500,2000,3000)

上面代碼實現的下拉屏幕刷新功能,下拉刷新其實也是一個滑動的操作,是先滑動一段距離然后松開。

當然,如果你要實現上滑加載更多的微博,可以直接將坐標顛倒過來即可,這里我們將方法替換成flick(),也就是只需要替換最后一行代碼。

driver.flick(487, 2085, 513, 257)

不過,這里有一個非常顯著的問題,手機的坐標到底寬高都是多少呢?雖然說,我們程序員什么都通過代碼先解決不要一上來就用工具。

但博主想說,這種坐標每個手機的像素分辨率都不同,比如上面swipe就是博主猜測的坐標。而flick()博主試了半天,沒弄出來,最后還是借助Appium生成坐標給我。

如上圖所示,我們先點擊藍色選框中像“一橫”的圖標,然后記得點錄制“眼睛”按鈕。接著,在App上拉兩個點,這2個點就是滑動的間距,最后生成如下圖所示的代碼。

這里就有2個坐標,當然上面的代碼是動作鏈的知識后面我們會講解。這里我們需要copy這2個坐標到flick()方法中,然后就可以下滑微博加載數據。

至于加載微博的動圖與下滑微博的動圖,大家都玩過微博,這里不需要演示。

屏幕點擊

以前的微博都是限制為140字,你不需要打開微博詳情,也能看到微博的所有數據。但是自從長微博出現之后,有些微博還必須點擊進去才能看完整。

同樣,我們爬取這些數據,有時候也要點擊進去才能完全獲取長微博的數據。所以,我們需要掌握如何點擊某個微博。

在Appium包中,我們點擊微博使用的是:tap()方法。該方法不僅支持單指點擊,而且最多可以支持5個手指,同時也可以設置點擊的時長。具體定義如下:

def tap(self: T, positions: List[Tuple[int, int]], duration: Optional[int] = None) -> T

positions:點擊的位置組成的列表,比如五個手指,那就是5個坐標值的列表

duration:點擊持續的時間,時間短就是點擊操作,時間長就是長按操作

示例代碼如下:

el2 = driver.tap([(500,500)])
el2.click()

不過,這里有讀者肯定會問,每條微博的我難道用坐標取定位?那是怎么區分你點的是哪條微博,畢竟一個頁面最少也有2條微博。這里,我們先來看張圖:

這里,博主點擊的是第2條微博數據,可以看到其id就是微博的內容。所以,后面我們想要獲取微博的詳細內容,可以直接通過獲取內容后在點擊。

屏幕拖動

看到這個小標題,博主都有寫困惑。拖動與滑動是不是差不多的?

還別說,博主覺得還真差不多,不過這2個在Appium包中的方法卻不一樣,前文的滑動時通過坐標進行定位的,這里的拖動是通過元素定位的。

比如,你需要你滑動的距離是一個按鈕到另一個按鈕的位置,我們可以直接獲取到這2個按鈕,然后使用scroll()方法實現滑動操作。其定義如下:

def scroll(self: T, origin_el: WebElement, destination_el: WebElement, duration: Optional[int] = None) -> T

origin_el:被操作的元素

destination_el:目標元素

duration:持續時間

這里就不演示了,就是獲取元素位置然后拖動到指定元素的位置。與前文實現的效果差不多,只是將坐標變成了2個元素的位置。

屏幕拖拽

同樣的,微博不好演示的還有拖拽操作。它的方法為drag_and_drop(),其定義如下:

def drag_and_drop(self: T, origin_el: WebElement, destination_el: WebElement) -> T

origin_el:被拖拽的元素

destination_el:目標元素

這里的拖拽你可以理解為將一個按鈕元素拖動到另一個按鈕的位置,這里拖拽的是元素本身,不是位置的滑動。微博中暫時也沒有演示的操作,感興趣的可以測試其他App。

文本輸入

在模擬登錄或者說這里發微博的時候,用戶肯定需要模擬輸入文本。而且,在需要登錄的爬蟲場景之下,登錄都是必備步驟。比如微信朋友圈內容的爬取,你不登陸看得到朋友圈嗎?

所以,我們需要掌握Appium的文本輸入操作。而它提供了2個方法進行文本的輸入,一個是set_text();一個是send_keys()。

現在我們模擬微博輸入賬號,示例代碼如下:

from appium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec

server = "http://localhost:4723/wd/hub"
desired_caps = {
    "platformName": "Android",
    "deviceName": "liyuanjing",
    "appPackage": "com.sina.weibo",
    "appActivity": "com.sina.weibo.MainTabActivity",
}
driver = webdriver.Remote(server, desired_caps)
wait = WebDriverWait(driver, 20)
time.sleep(5)
el1 = driver.find_element_by_id("com.android.permissioncontroller:id/permission_allow_button")
el1.click()
el2 = wait.until(ec.presence_of_element_located((By.ID, 'com.sina.weibo:id/titleBack')))
el2.click()
el3 = wait.until(ec.presence_of_element_located((By.ID, 'com.sina.weibo:id/et_login_view_phone')))
el3.send_keys("liyuanjinglyj@163.com")

這里,我們只是模擬輸入文本,當然登錄用戶名是手機,但手機屬于隱私。博主這里替換成郵箱。感興趣的可以自己替換手機試試。同時也可以替換為send_text()方法。

動作鏈

動作鏈顧名思義就是一系列操作動作的組合。在Selenium中,動作鏈是ActionChains,而Appium中,動作鏈是TouchAction。

比如,我們執行的下拉刷新其實就是一個動作鏈。這里,我們會執行2個動作,一個是按壓,一個是從指定位置滑動到另一個位置。這里,我們將2個動作組合實現:

TouchAction(driver).press(x=380, y=2101).move_to(x=390, y=519).release()

實戰:爬取微博首頁信息

其實,Appium開始推出的時候,是為了自動化測試準備的工具,并不專用于爬蟲數據。而且Appium有一個缺陷,目前沒有直接的辦法獲取圖片。

如果你想下載App界面中的圖片,可以模擬用戶長按的操作進行圖片的下載。也可以直接截圖。話不多說,我們來實現獲取微博的文字信息并保存到目錄。示例如下:

from appium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
import os


def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    isExists = os.path.exists(path)
    # 判斷結果
    if not isExists:
        # 如果不存在則創建目錄
        # 創建目錄操作函數
        os.makedirs(path)
        print(path + ' 創建成功')
        return True
    else:
        # 如果目錄存在則不創建,并提示目錄已存在
        print(path + ' 目錄已存在')
        return False


server = "http://localhost:4723/wd/hub"
desired_caps = {
    "platformName": "Android",
    "deviceName": "liyuanjing",
    "appPackage": "com.sina.weibo",
    "appActivity": "com.sina.weibo.MainTabActivity",
}
driver = webdriver.Remote(server, desired_caps)
wait = WebDriverWait(driver, 20)
time.sleep(5)
el1 = driver.find_element_by_id("com.android.permissioncontroller:id/permission_allow_button")
el1.click()
time.sleep(5)
mkdir("weiboFile")
for i in range(10):
    items = driver.find_elements_by_id("com.sina.weibo:id/contentTextView")
    for item in items:
        txt_text = item.get_attribute("content-desc")
        folder_output = 'weiboFile/%s.txt' % str(int(time.time()))
        with open(folder_output, "w", encoding='utf-8') as f:
            f.write(txt_text)
        f.close()
        print(txt_text)
    driver.swipe(487, 2085, 513, 257, 3000)

上面代碼主要的功能在for-in循環之中。這里,我們通過先獲取文本數據保存之后,在滑動屏幕獲取其他的微博數據。

如果你想獲取更多的數據,可以把循環的次數設置的更大一些。因為App的數據都是在滑動之中進行加載的。運行之后,效果如下所示:


到此這篇關于python爬蟲之Appium爬取手機App數據及模擬用戶手勢的文章就介紹到這了,更多相關Appium爬取手機App數據內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python 網頁解析器掌握第三方 lxml 擴展庫與 xpath 的使用方法
  • python網絡爬蟲精解之pyquery的使用說明
  • Python 給我一個鏈接西瓜視頻隨便下載爬蟲
  • python網絡爬蟲精解之XPath的使用說明

標簽:安慶 烏魯木齊 三亞 湘西 葫蘆島 呼倫貝爾 呼倫貝爾 銀川

巨人網絡通訊聲明:本文標題《python爬蟲之Appium爬取手機App數據及模擬用戶手勢》,本文關鍵詞  python,爬蟲,之,Appium,爬取,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python爬蟲之Appium爬取手機App數據及模擬用戶手勢》相關的同類信息!
  • 本頁收集關于python爬蟲之Appium爬取手機App數據及模擬用戶手勢的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲视频电影在线| 精品美女一区二区| 日本欧美在线观看| 中文字幕av在线一区二区三区| aaa亚洲精品| 日本午夜一区二区| 中文字幕欧美区| 精品国产一区二区三区久久影院 | 欧美亚洲日本国产| 国产+成+人+亚洲欧洲自线| 亚洲大片在线观看| ●精品国产综合乱码久久久久| 欧美美女一区二区| 色婷婷av一区二区三区软件| 国内精品伊人久久久久av影院| 午夜精品福利久久久| 中文字幕日韩av资源站| 国产日本欧洲亚洲| 日韩精品一区二区三区中文精品| 欧美日韩一区中文字幕| 99re8在线精品视频免费播放| 成人在线综合网| 岛国精品在线观看| 国产精品1区2区3区在线观看| 久久国产成人午夜av影院| 日本中文在线一区| 欧美在线不卡视频| 91免费版在线| 精品视频在线看| 91精品国产一区二区三区| 欧美日韩免费一区二区三区视频| 91福利国产成人精品照片| 在线一区二区三区四区五区| 91福利社在线观看| 欧美无乱码久久久免费午夜一区 | 韩国欧美国产1区| 国产成人自拍网| 99国产欧美另类久久久精品| 91理论电影在线观看| 欧美三级电影在线看| 91激情五月电影| 日韩精品一区二区三区swag| 国产亚洲精品资源在线26u| 欧美韩国日本综合| 天堂在线亚洲视频| 国产一区二区在线电影| 一本大道久久a久久综合| 欧美日韩一二三区| 国产午夜精品一区二区三区嫩草| 中文字幕一区二区三区精华液 | 久久se精品一区精品二区| 高清久久久久久| 欧美久久久一区| 欧美国产精品劲爆| 午夜精品久久一牛影视| 国产精品亚洲人在线观看| 欧美三日本三级三级在线播放| 2024国产精品视频| 亚洲自拍与偷拍| 国产盗摄精品一区二区三区在线 | 国产精品进线69影院| 亚洲成人1区2区| 99国产精品久久久久久久久久| 欧美不卡一区二区三区四区| 亚洲主播在线观看| 一本大道av伊人久久综合| 久久精品免费在线观看| 美女视频一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 色婷婷综合久久久中文一区二区| 日韩精品综合一本久道在线视频| 亚洲影视在线观看| 欧美主播一区二区三区美女| 国产亚洲一二三区| 国产伦精品一区二区三区免费迷 | 久久蜜桃一区二区| 久久精品国产精品青草| 日韩一区二区三区免费看| 天天色 色综合| 日韩视频一区二区| 免费观看久久久4p| 精品免费视频一区二区| 蜜臀久久99精品久久久久久9| 欧美三级日本三级少妇99| 亚洲成av人片在线观看无码| 制服丝袜激情欧洲亚洲| 免费成人深夜小野草| 久久亚洲综合av| 色一情一乱一乱一91av| 亚洲18色成人| 日韩欧美久久久| 懂色中文一区二区在线播放| 欧美国产日韩a欧美在线观看 | 国产麻豆视频一区| 亚洲素人一区二区| 91精品国产综合久久精品app| 精品亚洲porn| 亚洲综合久久久| 精品欧美一区二区久久 | 亚洲免费观看在线视频| 在线不卡a资源高清| 精一区二区三区| 亚洲激情图片一区| 精品久久五月天| 日本道精品一区二区三区| 麻豆精品一区二区av白丝在线| 国产日韩精品一区二区三区 | 亚洲国产高清在线| 欧美一区二区在线不卡| youjizz久久| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲综合激情另类小说区| 中文天堂在线一区| 欧美一级二级三级蜜桃| 国产精品美女一区二区三区 | 欧美性做爰猛烈叫床潮| 国产成人亚洲精品青草天美| 亚洲小少妇裸体bbw| 亚洲丝袜自拍清纯另类| 欧美一区二区精美| 在线精品视频免费观看| 99在线精品视频| 国产91精品免费| 经典三级一区二区| 美女视频一区二区三区| 午夜一区二区三区视频| 亚洲一区精品在线| 亚洲精选一二三| 亚洲日本在线天堂| 亚洲欧美色一区| 国产精品国产三级国产a| 中文字幕不卡三区| 国产精品福利av| 亚洲精品欧美在线| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品美女一区二区三区| 国产精品国产成人国产三级 | 欧美videos中文字幕| 精品日本一线二线三线不卡| 26uuu国产日韩综合| 久久婷婷成人综合色| 国产亚洲综合在线| 依依成人精品视频| 蜜桃av噜噜一区二区三区小说| 久久99最新地址| 91小视频在线| 欧美一区二区私人影院日本| 久久影院视频免费| 亚洲精品成人天堂一二三| 午夜精品一区二区三区免费视频| 麻豆精品视频在线观看免费| 成人综合婷婷国产精品久久蜜臀 | 欧美一区二区精品久久911| 亚洲精品一区二区三区在线观看 | 久久久国产精华| 亚洲第一精品在线| 成人美女视频在线观看| 欧美久久久久免费| 一区二区三区精品视频| 国产九色sp调教91| 这里只有精品99re| 中文字幕五月欧美| 国产精品2024| 欧美大片日本大片免费观看| 亚洲韩国精品一区| jlzzjlzz欧美大全| 久久久美女毛片| 国产呦萝稀缺另类资源| 欧美另类高清zo欧美| 亚洲女同女同女同女同女同69| 国产精品影视在线观看| 欧美一二三四区在线| 午夜视频一区二区三区| 成人国产在线观看| 久久先锋影音av| 国产精品乡下勾搭老头1| 日韩一区二区免费在线电影| 日韩精品每日更新| 在线播放91灌醉迷j高跟美女| 日韩精品成人一区二区在线| 欧美日韩国产色站一区二区三区| 中文字幕亚洲精品在线观看| 国产二区国产一区在线观看| 国产乱人伦偷精品视频免下载| 日韩视频一区二区三区在线播放| 美女视频黄久久| 久久免费电影网| 成人免费av网站| 亚洲精选在线视频| 欧美综合天天夜夜久久| 亚洲va欧美va国产va天堂影院| 欧美日本韩国一区| 久久99最新地址| 亚洲欧洲美洲综合色网| 欧美性xxxxx极品少妇| 亚洲成人免费观看| 欧美不卡一区二区| 91视频com| 精品一区二区免费看| 亚洲一二三区视频在线观看|