<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何用 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è)備號(hào),就能操縱這臺(tái)手機(jī)。

          #? 寫在最后

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

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

          票販子為啥總能搶到票?

          很多平臺(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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲午夜久影院 | 青青草视频在线视频 | 啪啪啪视频免费在线观看 | aaawww| 婷婷五月天色色色 |