乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      教你幾招用Python玩轉(zhuǎn)微信

       乙甲壬 2020-07-17

      今天我們就帶你用Python玩轉(zhuǎn)其中的一些功能。

      01

      撤回消息

      如果有人撤回消息的時(shí)候,我們會(huì)很好奇,他又撤回了什么見不得人的消息,今天我們就用Python來實(shí)現(xiàn)一下第一時(shí)間把原消息轉(zhuǎn)發(fā)到文件助手,當(dāng)然也可以發(fā)回給發(fā)送者,哈哈,滿足一下你們的好奇心!

      我們先來了解一下微信撤回消息的原理:

      其實(shí)微信撤回消息原理就是操作者在點(diǎn)擊撤回的時(shí)候,客戶端會(huì)自動(dòng)發(fā)一條系統(tǒng)消息:“xxx撤回了一條消息”,然后對(duì)方app端收到消息后解析,替換原消息,改個(gè)顯示的樣式即可

      豬哥給大家演示一下正常消息和撤回消息的內(nèi)容到底有什么區(qū)別:
      正常消息:Content='你好騷啊',大家留意一下MsgId='8784390488772995470'

      教你幾招用Python玩轉(zhuǎn)微信


      撤回消息:Content是一串xml格式的內(nèi)容

      教你幾招用Python玩轉(zhuǎn)微信


      我們?cè)谙旅姘阉袷交纯?/p>

      <sysmsg type='revokemsg'> <revokemsg> <session>xxx</session> <oldmsgid>1090336364</oldmsgid> <msgid>8784390488772995470</msgid> <replacemsg><![CDATA['豬哥' 撤回了一條消息]]></replacemsg> </revokemsg></sysmsg>

      分析上面撤回的Content字段我們發(fā)現(xiàn)<msgid>8784390488772995470</msgid>的id與我們之前發(fā)送消息的id是一致的,而<replacemsg>這個(gè)標(biāo)簽也驗(yàn)證了我們的猜想,確實(shí)是用新消息替換原消息。

      2.找到被撤回消息

      根據(jù)抓取正常消息和撤回消息的內(nèi)容我們發(fā)現(xiàn)規(guī)則:撤回消息中會(huì)包含之前被撤回的那條消息的msgid,那我們只要找到之前那條消息就可以了,而wxpy模塊默認(rèn)為我們緩存了最近的200條消息,所以我們只要遍歷這些歷史消息然后比較msgid就可以找到被撤回的那條消息啦!

      教你幾招用Python玩轉(zhuǎn)微信

      如果你微信消息太過頻繁,2分鐘之內(nèi)消息數(shù)量超過200,則可以將max_history設(shè)置大些。

      3.轉(zhuǎn)發(fā)被撤回消息

      原理也搞懂了,被撤回的消息也找到了,就差最后一步轉(zhuǎn)發(fā)消息了,如果你之前玩過wxpy肯定會(huì)了吧,只要一行代碼就可以將消息轉(zhuǎn)發(fā):

      msg.forward(bot.file_helper)

      4.代碼

      原理和過程講完了,代碼貼出來給大家看看,注釋還是比較詳細(xì),有不懂得話可以在學(xué)習(xí)群中問我。

      教你幾招用Python玩轉(zhuǎn)微信

      四、功能驗(yàn)證

      教你幾招用Python玩轉(zhuǎn)微信

      五、總結(jié)

      微信消息防撤回功能實(shí)現(xiàn)簡單,但實(shí)用性很好,目前項(xiàng)目的唯一缺點(diǎn)就是易用性差,簡單說就是我們還沒有將項(xiàng)目部署服務(wù)器,每次使用都得打開電腦然后運(yùn)行還得一直開著,豬哥考慮后面將項(xiàng)目部署在云服務(wù)器上或者打包成apk,這樣就使用起來就非常方便了,而且還可以把a(bǔ)pk發(fā)給朋友,讓朋友也體驗(yàn)此功能!

      學(xué)會(huì)這招,再也不用好奇對(duì)方到底撤回了啥消息,快下載項(xiàng)目試試吧!下載項(xiàng)目后可直接運(yùn)行不需要修改代碼

      Github項(xiàng)目地址:https://github.com/pig6/wxrobot
      wxpy官方文檔:https://wxpy./zh/latest

      02

      獲取好友列表

      WechatPCAPI 提供了方法 get_friends(),該方法返回信息包括:好友、群和公眾號(hào)的列表信息,信息內(nèi)容主要包括:微信號(hào)、昵稱和自己設(shè)置的備注。

      我們使用獲取的昵稱做個(gè)簡單的詞云展示,代碼實(shí)現(xiàn)如下所示:

      logging.basicConfig(level=logging.INFO)def on_message(message): passdef get_friends(): # 初始化微信實(shí)例 wx_inst = WechatPCAPI(on_message=on_message, log=logging) # 啟動(dòng)微信 wx_inst.start_wechat(block=True) # 等待登陸成功,此時(shí)需要人為掃碼登錄微信 while not wx_inst.get_myself():  time.sleep(5) print('登陸成功') nicknames = [] # 排除的詞 remove = ['還是', '不會(huì)', '一些', '所以', '果然',     '起來', '東西', '為什么', '真的', '這么',     '但是', '怎么', '還是', '時(shí)候', '一個(gè)',     '什么', '自己', '一切', '樣子', '一樣',     '沒有', '不是', '一種', '這個(gè)', '為了'   ] for key, value in wx_inst.get_friends().items():  if key in ['fmessage', 'floatbottle', 'filehelper'] or 'chatroom' in key:   continue  nicknames.append(value['wx_nickname']) words = [] for text in nicknames:  if not text:   continue  for t in jieba.cut(text):   if t in remove:    continue   words.append(t) global word_cloud # 用逗號(hào)隔開詞語 word_cloud = ','.join(words)def nk_cloud():    # 打開詞云背景圖    cloud_mask = np.array(Image.open('bg.png'))    # 定義詞云的一些屬性    wc = WordCloud(        # 背景圖分割顏色為白色        background_color='white',        # 背景圖樣        mask=cloud_mask,        # 顯示最大詞數(shù)        max_words=300,        # 顯示中文        font_path='./fonts/simkai.ttf',        # 最大尺寸        max_font_size=70    )    global word_cloud    # 詞云函數(shù)    x = wc.generate(word_cloud)    # 生成詞云圖片    image = x.to_image()    # 展示詞云圖片    image.show()    # 保存詞云圖片    wc.to_file('nk.png')

      看一下效果:

      教你幾招用Python玩轉(zhuǎn)微信

      03

      查看共同好友

      思路

      首先通過itchat這個(gè)微信個(gè)人號(hào)接口掃碼登錄個(gè)人微信網(wǎng)頁版,獲取可以識(shí)別好友身份的數(shù)據(jù)。這里是需要分別登錄兩人微信的,拿到兩人各自的好友信息存到列表中。

      這樣一來,查共同好友就轉(zhuǎn)化成了查兩個(gè)列表中相同元素的問題。獲取到共同好友信息后,可以通過命令行窗口print出來,也可以寫入txt文件。

      itchat

      itchat是一個(gè)開源的微信個(gè)人號(hào)接口,使用python調(diào)用微信從未如此簡單——其開發(fā)文檔 https://itchat./zh/latest/#itchat

      首先是安裝itchat模塊,例如:pip install itchat

      安裝完成在代碼中通過 import itchat 導(dǎo)入,之后直接調(diào)用

      #獲取登錄二維碼,掃碼登錄微信網(wǎng)頁版itchat.auto_login()#獲取好友信息列表friendList = itchat.get_friends(update=True)

      通過以上兩行,就可以拿到好友數(shù)據(jù)信息了,之后再從中篩選有用的信息進(jìn)行處理即可。這里有一處感覺特別酷,就是通過enableCmdQR參數(shù)在命令行中展示二維碼:

      #在命令行生成登錄二維碼itchat.auto_login(enableCmdQR=True)

      好友信息處理

      拿到的好友信息是什么樣的呢?其實(shí)特別有用的并不多,你的微信號(hào)和聯(lián)系方式是拿不到的。

      教你幾招用Python玩轉(zhuǎn)微信

      而這里的UserName,同一個(gè)你在不同的微信號(hào)中UserName并不相同。所以,在并沒有一個(gè)可以特定區(qū)分好友的情況下,我們選擇獲取多組信息來組合拼湊成一個(gè)整體,這里我選擇了以下數(shù)據(jù)組成一個(gè)字典dict:

      {'City':'','PYQuanPin':'','Province':'','PYInitial':'','Sex':0,'Signature':'','Signature':'','NickName':''}

      通過以上一個(gè)字典八組數(shù)據(jù)來代表每一位獨(dú)立好友信息。接下來在要比較的兩組好友信息列表中,進(jìn)行查重,這里我采用了最笨的遍歷方法:

      for i in contactlist:    if i in contactlist2:        if i not in[contactlist[0],contactlist2[0],empty,emptyM,emptyF]:            common_list.append(i)            count += 1

      記錄信息

      由于一些特殊字符因?yàn)榫幋a問題無法寫入txt文檔,我選擇既寫入txt又同時(shí)print出來相結(jié)合的方式:

      with open('record.txt','w') as f:    print(f'你們共有{count}位共同好友(若除性別外其它信息為空,不在此記錄),他們分別是:')    f.write(f'你們共有{count}位共同好友,他們分別是:')    for i in display:        print(i)        try:            f.write(i+'')        except:            f.write('該好友信息中含有字符無法識(shí)別,請(qǐng)?jiān)诖翱谥胁榭?#39;)

      回顧

      整個(gè)流程下來,涉及到的就是itchat接口的使用、將信息賦值給list、獲取兩個(gè)list公共元素、將信息寫入txt文件這四部分。

      除了itchat接口獲取好友數(shù)據(jù)看著復(fù)雜外,別的都是基礎(chǔ)語法。而itchat相關(guān)的代碼就幾行,所以你說,python是不是賊好用?

      代碼下載

      除了代碼外,這里我也將py文件封裝成了exe文件來直接下載,這樣即使電腦沒裝python或者你不用python也可以拿來玩了。

      04

      消息轟炸

      準(zhǔn)備

      • Python3.6 需要安裝python3.6并配置好環(huán)境路徑

      • 安裝好python后,打開電腦的CMD終端輸入pip install itchat安裝itchat模塊

      • 需要設(shè)置好默認(rèn)看圖軟件

      核心代碼

      import itchatimport timeprint('掃一下彈出來的二維碼')itchat.auto_login(hotReload=True)boom_remark_name = input('輸入你要轟炸的人的微信備注,按回車建繼續(xù)')message = input('輸入你要轟炸的內(nèi)容,按回車鍵開始轟炸')boom_obj = itchat.search_friends(remarkName=boom_remark_name)[0]['UserName']while True: time.sleep(0.5) print('正在轟炸。。。') itchat.send_msg(msg=message, toUserName=boom_obj)在學(xué)習(xí)過程中有什么不懂得可以加我的python學(xué)習(xí)交流扣扣qun,784758214群里有不錯(cuò)的學(xué)習(xí)視頻教程、開發(fā)工具與電子書籍。與你分享python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)好python,和學(xué)習(xí)什么內(nèi)容

      代碼講解

      import itchat

      導(dǎo)入itchat模塊

      import time

      導(dǎo)入time模塊

      itchat.auto_login(hotReload=True)

      登錄微信,采用熱加載的方式登錄網(wǎng)頁版的微信,會(huì)生成一個(gè)itchat.pkl的文件,用于保持登錄狀態(tài),有點(diǎn)類似于cookie

      教你幾招用Python玩轉(zhuǎn)微信

      boom_remark_name = input('輸入你要轟炸的人的微信備注,按回車建繼續(xù)') 這里一定要輸入你給微信好友的備注名,否者無法定位到好友

      message = input('輸入你要轟炸的內(nèi)容,按回車鍵開始轟炸')

      這里輸入要轟炸的內(nèi)容

      boom_obj = itchat.search_friends(remarkName=boom_remarkname)[0]['UserName']

      這里通過微信好友的備注名找到微信好友的信息,再通過UserName定位到好友

      while True: 死循環(huán)轟炸 time.sleep(0.5)設(shè)置睡眠,以免出現(xiàn)消息發(fā)送頻繁導(dǎo)致不能發(fā)送微信消息,此處可自行設(shè)置,睡眠時(shí)間不能太短 print('正在轟炸。。。')

      教你幾招用Python玩轉(zhuǎn)微信

      itchat.send_msg(msg=message, toUserName=boom_obj)

      教你幾招用Python玩轉(zhuǎn)微信

      如何使用

      • 打開CMD終端

      • 輸入python

      • 將We.py文件拖入終端

      • 按回車

      • 掃一下彈出來的二維碼,確認(rèn)登錄微信

      • 輸入你要轟炸的人的微信備注(!!!一定要是微信好友的備注,沒有備注請(qǐng)?zhí)砑觽渥?

      • 輸入要轟炸的內(nèi)容

      • 按回車鍵開始轟炸

      如何退出

      按Ctrl + C 退出轟炸

      04

      拍一拍

      用appium模擬操控手機(jī)并截圖,通過圖像識(shí)別定位好友頭像坐標(biāo),最后用appium模擬雙擊頭像坐標(biāo),以此實(shí)現(xiàn)“拍一拍”功能。

      效果展示:

      具體步驟:

      一、用appium操控手機(jī)

      關(guān)于appium的安裝及使用方法,這里就不再贅述了,直接進(jìn)入操作步驟

      1.用python打開微信,代碼如下

      desired_caps = {'platformName': 'Android',            'deviceName': 'VOG-AL00',            'appPackage': 'com.tencent.mm',            'appActivity': '.ui.LauncherUI',            'noReset': 'true',            'fullReset': 'false'}server = 'http://localhost:4723/wd/hub'driver = webdriver.Remote(server, desired_caps)

      難點(diǎn)在于desired_cap參數(shù)的配置,這里再給大家介紹一下:

      • platformName:表示設(shè)備操作系統(tǒng)
        deviceName:表示設(shè)備名稱
        apppackage:表示app程序包名
        appActivity:表示app入口Activity名。

      將手機(jī)連接電腦,打開開發(fā)者模式,運(yùn)行此程序,就會(huì)發(fā)現(xiàn)手機(jī)自動(dòng)打開了微信。

      二、模擬雙擊頭像

      1.原理介紹

      我們都知道,微信“拍一拍”是通過雙擊好友頭像實(shí)現(xiàn)的,如下圖所示:

      教你幾招用Python玩轉(zhuǎn)微信

      想要雙擊頭像,就要先獲得頭像在屏幕中的坐標(biāo)

      這里給大家介紹1個(gè)函數(shù):

      基于Python-opencv2的目標(biāo)定位模塊:Aircv使用其find_template函數(shù),可以查找目標(biāo)圖像在原始圖像中的坐標(biāo)范圍,用法如下:

      def matchImg(imgsrc, imgobj, confidencevalue=0.7): imsrc = ac.imread(imgsrc) imgobj = ac.imread(imgobj) match_result = ac.find_template(imsrc, imgobj,confidencevalue) return match_result

      其中imgsrc=原始圖片路徑,imgobj=待查找的目標(biāo)圖片路徑。
      如果未找到,則match_result=None;
      若找到,則返回如下數(shù)據(jù):

      {'result':(570.0, 2771.0), 'rectangle': ((30, 1601), (30, 3941), (1110, 1601), (1110,3941)), 'confidence': 0.999999463558197}

      其中:

      • result為匹配圖片在原始圖片上的中心坐標(biāo)點(diǎn),也就是我們要找的點(diǎn)擊點(diǎn);

      • rectangle為匹配圖片在原始圖像上四邊形的坐標(biāo);

      • confidence為匹配相似率。

      2.那么該如何在程序中自動(dòng)獲取獲取好友頭像坐標(biāo)呢?

      在客戶端appium中,可以確定頭像在屏幕中的像素為140×140
      我們可以先把好友頭像保存,再用ps把頭像改為此像素。

      然后在程序中創(chuàng)建1個(gè)while循環(huán),在第一步完成的基礎(chǔ)上,手動(dòng)進(jìn)入好友聊天框(其實(shí)也可以通過識(shí)別好友頭像自動(dòng)進(jìn)入)

      通過appium對(duì)手機(jī)屏幕截圖并命名為src.png,將其和頭像路徑(obj.png)導(dǎo)入1中的檢測(cè)函數(shù):

      driver.save_screenshot('src.png')imgsrc='src.png'imgobj='obj.png'match_result=matchImg(imgsrc, imgobj)

      若返回None,則說明聊天窗口沒檢測(cè)到好友頭像,繼續(xù)循環(huán);

      若檢測(cè)到頭像坐標(biāo),則解析返回的坐標(biāo)數(shù)據(jù),用for循環(huán)模擬雙擊坐標(biāo)位置:

      if match_result is not None:    result = [match_result['rectangle'][0], match_result['rectangle'][3]]    for i in range(2):        driver.tap(result,100)    print('拍成功')else:    print('沒找到頭像')

      這樣就大功告成了

      教你幾招用Python玩轉(zhuǎn)微信

      是不是很簡單?

      05

      自動(dòng)告警

      說到告警,相信每個(gè)運(yùn)維人員都不會(huì)陌生。以往我們用來發(fā)送告警的方式往往是短信或者郵件,但是這兩種方式要么不夠靈活要么實(shí)時(shí)性不夠。隨著微信的普及,現(xiàn)在越來越多的互聯(lián)網(wǎng)應(yīng)用選擇用微信作為平臺(tái)發(fā)送告警信息,今天就跟大家分享一個(gè)利用Python實(shí)現(xiàn)微信告警的方法。

      目前集成微信告警主要有兩種方式:

      • 個(gè)人微信號(hào)發(fā)送告警

      • 訂閱號(hào)/服務(wù)號(hào)/企業(yè)微信發(fā)送告警

      個(gè)人微信號(hào)發(fā)送告警

      使用個(gè)人號(hào)發(fā)送信息,其實(shí)就是通過調(diào)用API實(shí)現(xiàn)模擬網(wǎng)頁登錄與發(fā)信,這種方式需要使用個(gè)人賬號(hào)掃描二維碼登錄以后,腳本才能運(yùn)行,實(shí)現(xiàn)的效果與收到朋友的微信無異,還可以發(fā)送至指定群聊。聽著都挺好,就是可惜當(dāng)前微信已不支持網(wǎng)頁登錄了。。。(太坑爹,debug半天才發(fā)現(xiàn)…)

      教你幾招用Python玩轉(zhuǎn)微信

      企業(yè)微信發(fā)送告警

      微信的公眾號(hào)拆分成了訂閱號(hào)與服務(wù)號(hào),如果通過訂閱號(hào)與服務(wù)號(hào)發(fā)送告警,即顯得專業(yè),又無需掃碼登錄,更適用于服務(wù)器上長期運(yùn)行。但可惜訂閱號(hào)與服務(wù)號(hào)群發(fā)信息的數(shù)量有限制(少得可憐,TX太摳了),我們今天就以企業(yè)微信的方式實(shí)現(xiàn)微信告警推送。

      教你幾招用Python玩轉(zhuǎn)微信
      注冊(cè)企業(yè)微信

      如果自己非當(dāng)前所屬的企業(yè)微信管理員,或者暫無企業(yè)微信,可以先申請(qǐng)一個(gè),現(xiàn)在申請(qǐng)過程非常簡單,申請(qǐng)入口:https://work.weixin.qq.com/

      完成后可通過首頁進(jìn)行人員添加

      教你幾招用Python玩轉(zhuǎn)微信

      創(chuàng)建應(yīng)用

      在開始調(diào)用公眾號(hào)的API之前,我們要先創(chuàng)建一個(gè)應(yīng)用,告警可以發(fā)送到指定的應(yīng)用中,同時(shí)我們還可以對(duì)應(yīng)用授權(quán),以限制可以看到告警的人員范圍。

      教你幾招用Python玩轉(zhuǎn)微信

      創(chuàng)建完成后,點(diǎn)擊應(yīng)用圖標(biāo)可以看到如下內(nèi)容,記錄下AgentId、Secret的值,后續(xù)會(huì)使用到。

      教你幾招用Python玩轉(zhuǎn)微信

      點(diǎn)擊企業(yè)信息,查看并記錄企業(yè)ID,后續(xù)會(huì)用上。

      教你幾招用Python玩轉(zhuǎn)微信
      調(diào)用微信API

      實(shí)現(xiàn)企業(yè)微信自動(dòng)推送,需要調(diào)用如下兩個(gè)微信的API,詳細(xì)參數(shù)可查看官方文檔。

      • 獲取token:https://work.weixin.qq.com/api/doc#10013

      • 發(fā)送消息:https://work.weixin.qq.com/api/doc#10167

      代碼實(shí)現(xiàn)

      如下代碼實(shí)現(xiàn)調(diào)用企業(yè)微信進(jìn)行推送的功能,可結(jié)合實(shí)際業(yè)務(wù)環(huán)境進(jìn)行調(diào)用和修改。

      123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
      #!/usr/bin/env python3# -*- coding: utf-8 -*-# @Time    : 2020/03/18 20:55# @Author  : Walton# @FileName: WeChatAlert.py# @Software: PyCharm# @Blog    :https://vonten.import timeimport jsonimport requestsDay = time.strftime('%Y{y}%m{m}%dr22oway').format(y='年',m='月',d='日')def get_token():    '''    獲取access_token    :return: access_token or None    '''    url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken'    values = {'corpid': 'Your corpid',  #輸入企業(yè)ID              'corpsecret': 'Your secret',  #輸入應(yīng)用secret值              }    req = requests.post(url, params=values)    if req.status_code == 200:        return json.loads(req.content)['access_token']    else:        print('access_token獲取失敗')        return Nonedef send_msg(agentid, content):    '''    調(diào)用微信API實(shí)現(xiàn)信息推送    :param agentid: 企業(yè)微信agentId    :param content: 推送內(nèi)容    :return:    '''    url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + get_token()    header = {        'Content-Type': 'application/json'    }    form_data = {        'touser': '@all',        'toparty': ' PartyID1 | PartyID2 ',        'totag': ' TagID1 | TagID2 ',        'msgtype': 'textcard',        'agentid': agentid,        'textcard': {            'title': '自動(dòng)告警',            'description': content,            'url': 'https://vonten.',            'btntxt': '更多'        },        'safe': 0    }    req = requests.post(url, data=json.dumps(form_data).encode('utf-8'), headers=header)    if req.status_code == 200:        return json.loads(req.content)    else:        print('告警推送失敗')        return Noneif __name__ == '__main__':    send_msg('1000002','<div class=\'gray\'>{date}</div> <div class=\'normal\'>以下設(shè)備出現(xiàn)異常,請(qǐng)及時(shí)檢查!</div><div class=\'highlight\'>XXX核心交換機(jī)</div>'.format(date=Day))
      結(jié)果測(cè)試
      教你幾招用Python玩轉(zhuǎn)微信

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多