由於工作需要,經常需要向多個微信群聊群發訊息。本來指望能透過微信自帶的“群發助手”實現,但是經實踐發現“群發助手”只能向個人好友群發訊息,並不能實現向微信群群發訊息。經思考發現兩種解決方式:1、建立一個訂閱號(個人無法建立服務號,服務號推送功能更為強大),讓他人關注,推送訊息;2、最近有點入魔Python,乾脆編寫一個向群發工具吧。

透過Python來實現微信的相關功能,都得感謝itchat專案(專案簡介 - itchat),提供了很多使用簡單卻功能強大的函式,各位小夥伴可以自主學習,一點python基礎就可以,上手難度小。

迴歸正題,本人工作實際場景中,群發的微信群基本固定且是指定的,更新次數較少,所以首先構思了一個獲取微信群聊列表且能根據自己選擇生成一個儲存群聊列表本地檔案。下面貼程式碼

1、微信群資訊獲取

https://

pan。baidu。com/s/1o8Cn2M

WPFxemN81wtifsLQ

打包好的exe檔案

#用於向指定群傳送訊息

# coding:utf-8

#v1。1 支援獲取群列表並選擇需要儲存的群列表寫入本地檔案中

import

itchat

import

wx

from

threading

import

Thread

from

wx。lib。pubsub

import

pub

import

time

import

os

class

Threadacquire

Thread

):

“”“Test Worker Thread Class。”“”

#————————————————————————————————————

def

__init__

self

):

“”“Init Worker Thread Class。”“”

Thread

__init__

self

self

start

()

# start the thread

def

run

self

):

global

chatroomlist

chatroomlist

=

{}

notice

=

“請掃碼或手機確認登入”

wx

CallAfter

pub

sendMessage

‘update’

re_msg

=

notice

itchat

auto_login

hotReload

=

True

notice

=

“登入成功”

wx

CallAfter

pub

sendMessage

‘update’

re_msg

=

notice

chatlist

=

itchat

get_chatrooms

update

=

True

if

chatlist

!=

[]:

wx

CallAfter

pub

sendMessage

‘update’

re_msg

=

“以下為群列表

\n\n

time

sleep

1

for

chatroom

in

chatlist

chatroomNickname

=

chatroom

“NickName”

chatlistUsername

=

chatroom

‘UserName’

chatdict

=

{

chatroomNickname

chatlistUsername

}

chatroomlist

update

chatdict

print

chatroomNickname

wx

CallAfter

pub

sendMessage

‘update’

re_msg

=

chatroomNickname

else

print

“通訊錄無群聊”

wx

CallAfter

pub

sendMessage

‘update’

re_msg

=

“通訊錄無群聊”

itchat

run

()

#介面

class

MyForm

wx

Frame

):

#——————————————————————————————————-

#set the window layout

def

__init__

self

):

wx

Frame

__init__

self

None

wx

ID_ANY

“微信撤回訊息檢視”

size

=

500

410

))

global

nickname

contents

acquireButton

saveButton

bkg

=

wx

Panel

self

wx

ID_ANY

#bkg。SetBackgroundColour(“Grey”)

acquireButton

=

wx

Button

bkg

label

=

‘獲取群資訊’

acquireButton

Bind

wx

EVT_BUTTON

self

acquire

saveButton

=

wx

Button

bkg

label

=

‘儲存需要群發的群列表’

saveButton

Disable

()

saveButton

Bind

wx

EVT_BUTTON

self

save

#nickname=wx。TextCtrl(bkg)

contents

=

wx

TextCtrl

bkg

style

=

wx

TE_MULTILINE

|

wx

HSCROLL

#contents。SetStyle(410,335,wx。TextAttr(“RED”,“YELLOW”))

hbox

=

wx

BoxSizer

()

#hbox。Add(nickname,1,wx。EXPAND)

hbox

Add

acquireButton

0

wx

LEFT

5

hbox

Add

saveButton

0

wx

LEFT

5

vbox

=

wx

BoxSizer

wx

VERTICAL

vbox

Add

hbox

0

wx

EXPAND

|

wx

ALL

5

vbox

Add

contents

1

wx

EXPAND

|

wx

LEFT

|

wx

BOTTOM

|

wx

RIGHT

5

bkg

SetSizer

vbox

#建立一個pub接收器

pub

subscribe

self

updatedispaly

‘update’

#設定訊息傳送的物件,預設為傳送到登入微信的檔案助手

def

acquire

self

event

):

Threadacquire

()

acqbtn

=

event

GetEventObject

()

acqbtn

Disable

()

saveButton

Enable

()

#儲存使用者選擇的群聊列表,並轉化為字串寫入本地檔案

def

save

self

event

):

savechatlist

=

[]

linenum

=

contents

GetNumberOfLines

()

for

i

in

range

1

linenum

):

chatassign

=

contents

GetLineText

i

if

chatroomlist

get

chatassign

is

not

None

#savedict={chatassign:chatroomlist。get(chatassign)}

savechatlist

append

chatassign

#將撤回訊息寫入檔案

with

open

r

‘chatroomlist。txt’

‘w’

encoding

=

“utf8”

as

chatroomfile

chatroomfile

write

str

savechatlist

))

#os。getcwd()

print

“儲存成功”

contents

AppendText

“儲存成功

\n

儲存目錄為:

%s

\n

%

os

getcwd

())

itchat

logout

()

contents

AppendText

“已退出登入

\n

saveButton

Disable

()

acquireButton

Enable

()

#透過多行文字框顯示提示和記錄的資訊

def

updatedispaly

self

re_msg

):

displaymessage

=

re_msg

contents

AppendText

displaymessage

+

\n\n

# Main

if

__name__

==

“__main__”

app

=

wx

App

()

frame

=

MyForm

()

frame

Show

()

app

MainLoop

()

該工具是一個GUI程式,首先需要點選“獲取群資訊”獲取登入微信中的群列表(一般是儲存在通訊錄的群聊才能被搜尋到,但是登入時有更新訊息的群聊也會被搜尋到)

Python實現向微信群群發信息GUI程式

點選登入會呼叫itchat。auto_login()方法,首次登入會生成微信登入二維碼自動由系統預設圖片開啟軟體開啟。如果沒有開啟,請點選右邊的按鈕退出微信再重新登入獲取。如果多次登入都不能彈出微信二維碼,請看程式所在目錄有沒有生成二維碼檔案,開啟掃描,如果還不行,可嘗試設定下系統預設圖片(png格式)開啟檔案。

由於登入時會生成登入資訊檔案

itchat.pkl

儲存在程式所在目錄,所以下次登入會直接讀取,不需要生成二維碼,直接手機確認登入就好。如果把

這個檔案刪掉了

,就需要程式就會重新生成二維碼了。

Python實現向微信群群發信息GUI程式

獲取到群列表後刪除不需要群發的群聊,然後點選“儲存需要群發的群列表”就可以將群列表儲存在本地檔案中,該檔案在程式所在目錄。

Python實現向微信群群發信息GUI程式

該群列表檔案包含的群列表暱稱資訊是後面介紹的群發工具必要資訊。

2、群發工具(向微信群)

https://

pan。baidu。com/s/1fjVjfu

Ts8CHjpCVA1qh51w

程式碼下載

https://

pan。baidu。com/s/1NRLxKq

X4J5_Tp7NK35O40A

已經打包好的exe檔案

# 由於字數限制,只能作為檔案附件了

由於wxPython學的很淺,目前我所寫的工具只能將就都用一套GUI模板,只能將就用了。

Python實現向微信群群發信息GUI程式

使用步驟:

1、點選“選擇群列表檔案”選擇由群列表獲取的群列表檔案

Python實現向微信群群發信息GUI程式

Python實現向微信群群發信息GUI程式

2、點選“登入”微信,跟前面的微信群資訊獲取工具功能一致,過程也一致。

3、選擇需要群發的檔案(包含圖片,影片,其他檔案)或直接輸入資訊

Python實現向微信群群發信息GUI程式

選擇傳送的檔案

Python實現向微信群群發信息GUI程式

直接輸入需要群發的訊息

請注意:這裡是透過輸入框(上圖示紅)內容來判斷你想群發的是檔案(圖片、影片和檔案等)還只是文字資訊的。如果輸入框裡面是檔案路徑,則意味你要群發的是檔案;如果輸入框不是檔案路徑,則程式會認為你要群發的是文字資訊。

如果自己打包程式碼,發現無法傳送含中文名稱的檔案,請參考一下方法,再打包

課外知識:打包成exe可執行檔案的簡單方法

Python實現向微信群群發信息GUI程式

打包方法,將圖示ico檔案和程式碼檔案(py檔案)放在一個資料夾,然後透過“cd \d “指令切換到該目錄。執行

pyinstaller -F -w ——icon=ico圖示檔名 python程式碼檔案

就可打包出exe可執行檔案

https://

pan。baidu。com/s/1m0Y3ov

2nsdHyesBtZl85Cg

自己做的幾個ico圖示檔案

python(py2exe)打包成exe執行檔案,vista/win7下icon圖示顯示問題的解決方案 - CSDN部落格(參考該文章可以動手做ico圖示)