App 端自動化的最佳方案,完全解放雙手!

1. 前言

大家好,我是安果!

之前寫過一篇文章,文中提出了一種方案,可以實現每天自動給微信羣羣發新聞早報

如何利用 Python 爬蟲實現給微信羣發新聞早報?(詳細)

但是對於很多人來說,首先編寫一款 App 需要一定的移動端開發經驗,其次還需要另外編寫無障礙服務應用,如此顯得有一定難度的

本篇文章將介紹另外一種方案,即:利用前面文章介紹的 AutoJS 來實現自動給微信羣發送新聞早報

2. 爬蟲及服務

爲了演示方便,這裏以百度熱搜爲新聞早報數據源,

使用 Requests + BeautifulSoup 按熱度,爬取熱度最高的 15 條數據

import requests
from bs4 import BeautifulSoup

def baidu_top_tipic():
    """百度熱搜"""
    requests_page = requests.get('http://top.baidu.com/buzz?b=1&c=513&fr=topbuzz_b42_c513')
    soup = BeautifulSoup(requests_page.text, "lxml")

    # 查詢
    soup_text = soup.find_all("div", class_='c-single-text-ellipsis', text=True)

    top_list = []
    for index, text in enumerate(soup_text):
        top_list.append((str(index + 1) + "、" + text.string.strip()))

    # 取熱度最高的15條數據
    return '\n'.join(top_list[:15])

然後,利用 FastAPI 編寫獲取新聞早報的 API,部署到雲服務器上(這裏以 CentOS 爲例)

import uvicorn
from fastapi import FastAPI
from every_news import *

# pip3 install uvicorn
# pip3 install fastapi

# 實例化
app = FastAPI()

# 每日新聞
@app.get("/news")
async def rsc_api():
    msg = get_news()
    return {
        "code": 200,
        "msg": msg
    }

if __name__ == '__main__':
    uvicorn.run(app='news_api:app', host="0.0.0.0",
                port=6789, reload=True, debug=True)

最後,運行下面命令使服務在後臺運行

# 命令行後臺運行
# 日誌目錄:/news_api.log
nohup python3 /xag/news_api.py >  /news_api.log 2>&1 &

3. 自動化發送羣聊

在 VS Code 中編寫 AutoJS 腳本

首先,定義一個給羣聊發送消息的方法

PS:使用 click() 座標執行點擊操作僅適用於 Android 7.0+

//API調用獲取新聞數據
var url = "http://host:6789/news";

//發送羣聊名稱
var group_name = "羣聊名稱";

//發送信息給微信羣
function send_wx_msg(group_name, send_msg) {
    //如果休眠,喚醒設備
    //注意:爲了保證耗電低,設置睡眠(10s無操作)
    device.wakeUpIfNeeded()

    //打開微信
    app.launch("com.tencent.mm");
    text("微信").waitFor()

    //點擊進入到聊天界面
    var chat_element_bounds = text(group_name).findOne().bounds();
    //支持Android7.0+
    click(chat_element_bounds.centerX(), chat_element_bounds.centerY());
    sleep(3000)
    id("auj").className("EditText").findOne().setText(send_msg)
    sleep(3000)
    //發送消息
    text("發送").click()
    log("發送成功!")
    //返回到手機桌面
    back();
    home();

然後,在主線程中啓動一個新的線程,調用 API 接口,獲取數據後將數據發送出去

//線程
threads.start(function () {
    //獲取新聞
    http.get(url, {}, function (res, err) {
        //錯誤
        if (err) {
            log("抱歉!今天獲取新聞失敗。。。")
            return;
        }
        log("今日新聞獲取成功!")
        let html = res.body.string();
        let msg = JSON.parse(html).msg;
        send_wx_msg(group_name, msg)
    });
})

接着,使用 VS Code 將源碼導入到手機設備上

最後,選中源文件 - 右鍵 - 更多 - 定時任務,設置定時任務即可

4. 最後

如此,即可以實現每天早上給指定羣發送新聞早報的功能

當然,如果涉及多個羣聊的發送,只需要使用 AutoJS 查詢多個目標羣聊對象 + 頁面滑動,遍歷進行發送信息即可

另外,由於無障礙服務的不穩定性,可以在設置中 AutoJS 應用服務的優先級,保證程序的穩定運行

如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因爲這將是我持續輸出更多優質文章的最強動力!

推薦閱讀

移動端自動化 AutoJS 快速入門指南(上)

5 分鐘,使用內網穿透快速實現遠程桌面

聊聊 Jmeter 如何併發執行 Python 腳本

聊聊 PC 端自動化最佳方案 - Pywinauto

聊聊 PC 端自動化最佳方案 - WinAppDriver

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章