1. 如何用 Python 實(shí)現(xiàn)安卓機(jī)自動(dòng)化?

        共 3640字,需瀏覽 8分鐘

         ·

        2022-11-09 18:56

        這是「進(jìn)擊的Coder」的第 745 ?篇技術(shù)分享 作者:Jack Cui 來源:Jack Cui

        閱讀本文大概需要 6 分鐘。


        今天給大家介紹一套安卓機(jī)自動(dòng)化解決方案

        #? 投屏軟件:Scrcpy

        Scrcpy,全稱 screen copy,是一款開源的手機(jī)無線投屏軟件。

        4038e85701188b161193ebe5b2c0b8b0.webp

        而且還是跨平臺(tái)的,無論是在 Linux、Windows 還是 macOS 上都能使用。

        項(xiàng)目地址:

        https://github.com/Genymobile/scrcpy

        這里以 Windows 為例,安裝起來非常簡單:

        7c881728c664b9e02f1b61697e8f7e2a.webp

        直接下載安裝包并解壓就行,里面還帶了adb調(diào)試工具。

        然后添加一下系統(tǒng)的環(huán)境變量。

        168b68aa630231ecafae240d3f3bc0da.webp

        用 USB 線連接手機(jī)和電腦,將手機(jī)調(diào)整為開發(fā)者模式。

        51f929fa4f0aecf0659457407c42627f.webp

        這樣,在電腦上運(yùn)行 Scrcpy 指令:

              
                scrcpy
                

        就能將手機(jī)畫面投放到電腦上了。

        482c7cfcd9529cbba6d2799c3c93c7d2.webp

        我們可以通過這個(gè)投放的畫面,在電腦上,操縱這臺(tái)手機(jī)。

        但是,如果想要讓代碼自動(dòng)化控制,那就還需要另外一款工具。

        #? 自動(dòng)化工具:uiautomator2

        UiAutomator 是 Google 提供的用來做安卓自動(dòng)化測試的一個(gè) Java 庫,基于 Accessibility 服務(wù)。功能很強(qiáng),可以對第三方 App 進(jìn)行測試,獲取屏幕上任意一個(gè) APP 的任意一個(gè)控件屬性,并對其進(jìn)行任意操作,但有兩個(gè)限制:

        • 測試腳本只能使用 Java 語言

        • 測試腳本要打包成 jar 或者 apk 包上傳到設(shè)備上才能運(yùn)行

        于是有了 UiAutomator2,邏輯可以用 Python 編寫,能夠在電腦上控制手機(jī)。

        項(xiàng)目地址:

        https://github.com/openatx/uiautomator2

        安裝方法也非常簡單,直接 pip 安裝即可,不過為了方便環(huán)境的管理,還是先創(chuàng)建一個(gè) Conda 虛擬環(huán)境。

              conda?create?-n?android

        然后激活這個(gè)虛擬環(huán)境:

              conda?activate?android

        安裝 uiautomator2 和 weditor。

              python?-m?pip?install?uiautomator2?weditor

        然后用手機(jī)打開想要操控的 App,比如 BiliBili,打開軟件后,使用 Weditor 審查元素。

              python?-m?weditor

        這樣就開啟了一個(gè) Web 界面,在這個(gè)界面里,能夠?qū)彶樵兀?strong style="font-size:inherit;color:rgb(255,53,2);">定位一些想要點(diǎn)擊的點(diǎn)。

        57a86bd85a72fac278271001041ec3e5.webp

        比如我想要給一個(gè)視頻三連,那就審查三連的元素,然后將操作用代碼流程化。

              import?uiautomator2?as?u2
        import?time
        from?PIL?import?Image
        import?cv2
        import?numpy?as?np

        all_videos?=?[]

        def?get_images(device):
        ????views?=?device.xpath('//*[@resource-id="tv.danmaku.bili:id/recycler_view"]/android.view.ViewGroup/android.widget.FrameLayout[1]')
        ????for?idx,?view_box?in?enumerate(views.all()[:5]):
        ????????print("視頻{}?封面的中心坐標(biāo):".format(idx+1),?view_box.center())
        ????????image?=?view_box.screenshot()
        ????????image.save("{}.jpg".format(idx+1))
        ????????all_videos.append(view_box)

        def?refresh(device):
        ????device.swipe_ext("down")

        def?like_the_video(device):
        ????like_icon?=?device.xpath('//*[@resource-id="tv.danmaku.bili:id/recommend_icon"]')
        ????like_icon.click()
        ????print("視頻點(diǎn)贊成功")

        def?pay_for_the_video(device):
        ????coin_icon?=?device.xpath('//*[@resource-id="tv.danmaku.bili:id/coin_icon"]')
        ????coin_icon.click()
        ????time.sleep(0.1)
        ????pay_icon?=?device.xpath('//*[@resource-id="tv.danmaku.bili:id/pay_coins"]')
        ????pay_icon.click()
        ????print("視頻投幣成功")

        def?follow_the_up(device):
        ????follow_icon?=?device.xpath('//*[@resource-id="tv.danmaku.bili:id/follow"]')
        ????follow_icon.click()
        ????print("關(guān)注成功")

        def?back(device):
        ????back_icon?=?device.xpath('//*[@content-desc="轉(zhuǎn)到上一層級"]')
        ????back_icon.click()
        ????print("已退出視頻")

        if?__name__?==?"__main__":
        ????_DEVICE_ID?=?'da317199'
        ????d?=?u2.connect(_DEVICE_ID)?#?connect?to?device
        ????get_images(d)
        ????all_videos[3].click()
        ????print("點(diǎn)進(jìn)去了!")
        ????time.sleep(0.1)
        ????like_the_video(d)

        ????time.sleep(0.1)
        ????pay_for_the_video(d)

        ????time.sleep(0.1)
        ????follow_the_up(d)

        效果是這樣的:

        d89b183379e673d449c5619537c002a1.webp

        代碼里有個(gè) device_id 可以通過 adb 工具查詢,手機(jī)連接電腦后,再用如下指令查詢:

              adb?devices

        根據(jù)這個(gè)設(shè)備號,就能操縱這臺(tái)手機(jī)。

        #? 寫在最后

        這東西,還能用來做什么?

        你知道,為啥搶茅臺(tái)你總搶不到嗎?搶個(gè)演唱會(huì)門票搶不到?掛號掛不到?

        票販子為啥總能搶到票?

        很多平臺(tái)限制必須手機(jī)上搶,這個(gè)時(shí)候,這項(xiàng)技術(shù)就能排上用場了。

        我只能幫你到這了,剩下的,可以自己慢慢體驗(yàn)。

        所以,家里的舊手機(jī)不要扔!寫個(gè)腳本,能幫你干很多事~

        a12681656dacc93781bacccc99766ca8.webp

        End

        崔慶才的新書《Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)(第二版)》已經(jīng)正式上市了!書中詳細(xì)介紹了零基礎(chǔ)用 Python 開發(fā)爬蟲的各方面知識(shí),同時(shí)相比第一版新增了 JavaScript 逆向、Android 逆向、異步爬蟲、深度學(xué)習(xí)、Kubernetes 相關(guān)內(nèi)容,?同時(shí)本書已經(jīng)獲得 Python 之父 Guido 的推薦,目前本書正在七折促銷中!

        內(nèi)容介紹:《Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)(第二版)》內(nèi)容介紹


        940019a6f257f2f445d7c341f82a587e.webp


        掃碼購買




        好文和朋友一起看~
        瀏覽 194
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 皇后羞辱打开双腿调教h视频 | 日韩欧美性爱视频 | cao到她乖1v1高h黑暗森林 | 大鸡巴艹逼逼 | 欧美日韩不卡在线视频 |