python登录微信获取好友群生成列表

直接上代码

-- coding: utf-8 --

“””
Module implementing MainWindow.
“”“

from PyQt5.QtCore import QThread, pyqtSignal, Qt, pyqtSlot
from PyQt5.QtWidgets import *
from PyQt5 import QtGui

from Ui_cronSendMessage import Ui_MainWindow

import sys
import itchat
from itchat.content import *
import datetime
import time
import os
import requests
import json
import re
from urllib.request import urlretrieve
import traceback

current_path = os.path.dirname(os.path.abspath(file))

登陆微信

class LoginWechat(QThread):
# 自定义一个信号
finished_signal = pyqtSignal(object)

def __init__(self, parent=None, label=None, scroll_widget_layout=None, refresh_button=None, exit_button=None):
    super().__init__(parent)
    self.l = label
    self.scroll_widget_layout = scroll_widget_layout
    self.refresh_button = refresh_button
    self.exit_button = exit_button

# 在控制台中写入信息
def outputWritten(self, text=None):
    cursor = self.l.textCursor()
    cursor.movePosition(QtGui.QTextCursor.End)
    cursor.insertText(text)
    self.l.setTextCursor(cursor)
    self.l.ensureCursorVisible()

# 获取uuid
def open_qr(self):
    for get_count in range(1):
        self.outputWritten('获取uuid中……\n')
        uuid = itchat.get_QRuuid()
        while uuid is None:
            uuid = itchat.get_QRuuid()
            time.sleep(1)
        self.outputWritten('成功获取uuid\n')
        if itchat.get_QR(uuid, picDir=r'%s' % os.path.join(current_path, 'qrcode.jpg')):
            break
        elif get_count >= 1:
            self.outputWritten("获取二维码出错,请重启程序\n")
            sys.exit()
    return uuid

# 二维码登陆
def login_wechat(self):
    try:
        uuid = self.open_qr()
        self.outputWritten("请扫描二维码\n")
        waitForConfirm = False
        while 1:
            status = itchat.check_login(uuid)
            if status == '200':
                break
            elif status == '201':
                if waitForConfirm:
                    self.outputWritten('请进行确认\n')
                    waitForConfirm = True
            elif status == '408':
                self.outputWritten('重新加载二维码\n')
                time.sleep(3)
                uuid = self.open_qr()
                waitForConfirm = False
        userInfo = itchat.web_init()
        # print(userInfo)
        itchat.show_mobile_login()
        print('itchat.show_mobile_login() 执行完成!')
        # itchat.get_friends(True)
        itchat.get_friends()
        print('itchat.get_friends(update=True)[0:] 执行完成!')
        self.outputWritten('登陆成功!账号为:%s\n' % userInfo['User']['NickName'])
        itchat.start_receiving()
        print('itchat.start_receiving() 执行完成!')
        self.refresh_button.setText("已登录:{}".format(userInfo['User']['NickName']))
        self.exit_button.setEnabled(True)
    except Exception as e:
        print("登录出错:", e)
        self.outputWritten('登陆出错:{}\n'.format(e))

    try:
        # 获取群聊列表
        chatrooms = itchat.get_chatrooms()
        print('chatrooms = itchat.get_chatrooms() 执行完成!')
        print(type(chatrooms))
        #return chatrooms
    except Exception as e:
        self.outputWritten("获取群聊列表出错:{}\n".format(e))


    try:
        # 获取好友列表
        friends = itchat.get_friends()
        print('friends = itchat.get_friends() 执行完成!')
        print(type(friends))
        #return friends
    except Exception as e:
        self.outputWritten("获取群聊列表出错:{}\n".format(e))

    try:
        # 获取好友列表
        mps = itchat.get_mps()
        print('mps = itchat.get_mps() 执行完成!')
        print(type(mps))
        #return mps
    except Exception as e:
        self.outputWritten("获取群聊列表出错:{}\n".format(e))

    if chatrooms and friends and mps:
        return [chatrooms, friends, mps]

def run(self):
    try:
        self.refresh_button.setEnabled(False)
        self.exit_button.setEnabled(True)
        self.finished_signal.emit(self.login_wechat())
    except Exception as e:
        self.outputWritten("运行登录线程出错:{}\n".format(e))

class MainWindow(QMainWindow, Ui_MainWindow):
“””
Class documentation goes here.
“””
def init(self, parent=None):
“””
Constructor

    @param parent reference to the parent widget
    @type QWidget
    """
    super(MainWindow, self).__init__(parent)
    self.setupUi(self)

# 在控制台中写入信息
def outputWritten(self, text=None):
    # 获取文本框中文本的游标
    cursor = self.textEdit.textCursor()
    # 将游标位置移动到当前文本的结束处
    cursor.movePosition(QtGui.QTextCursor.End)
    # 写入文本
    cursor.insertText(text)
    # 设置文本的游标为创建了cursor
    self.textEdit.setTextCursor(cursor)
    self.textEdit.ensureCursorVisible()

'''
        ItChat登陆功能
    '''

@staticmethod
def _show_message(message):
    print('{}'.format(message))

# 获取群聊复选框选择状态
def checkChatRoom(self, state):
    try:
        checkBox = self.sender()
        if state == Qt.Unchecked:
            self.outputWritten(u'取消选择了{0}: {1}\n'.format(checkBox.id_, checkBox.text()))
            self.chatroom_list.remove(self.chatroom_dict[checkBox.text()])
        elif state == Qt.Checked:
            self.outputWritten(u'选择了{0}: {1}\n'.format(checkBox.id_, checkBox.text()))
            self.chatroom_list.append(self.chatroom_dict[checkBox.text()])
    except Exception as e:
        self.outputWritten("获取群聊选择状态失败:{}\n".format(e))

# 生成群聊列表
def generate_chatroom(self, chatrooms):
    # 清空原有群里列表
    while self.gridLayout.count():
        item = self.gridLayout.takeAt(0)
        widget = item.widget()
        widget.deleteLater()

    chatrooms = chatrooms[0]
    self.chatroom_dict = dict()
    try:
        for c, i in zip(chatrooms, range(len(chatrooms))):
            print(c['NickName'], c['UserName'])
            checkbox = QCheckBox(c['NickName'])
            checkbox.id_ = i
            self.chatroom_dict[c['NickName']] = c['UserName']
            checkbox.stateChanged.connect(self.checkChatRoom)  # 1
            self.gridLayout.addWidget(checkbox)
            #self.horizontalLayout_3.addWidget(self.checkBox_2)
        self.outputWritten("生成群聊成功!\n")
    except Exception as e:
        print(e)

# 生成好友列表
def generate_friends(self, chatrooms):
    # 清空原有群里列表
    while self.verticalLayout_4.count():
        item = self.verticalLayout_4.takeAt(0)
        widget = item.widget()
        widget.deleteLater()
    chatrooms = chatrooms[1]
    self.chatroom_dict = dict()
    try:
        for c, i in zip(chatrooms, range(len(chatrooms))):
            print(c['NickName'], c['UserName'])
            checkbox = QCheckBox(c['NickName'])
            checkbox.id_ = i
            self.chatroom_dict[c['NickName']] = c['UserName']
            checkbox.stateChanged.connect(self.checkChatRoom)  # 1
            self.verticalLayout_4.addWidget(checkbox)
            #self.horizontalLayout_3.addWidget(self.checkBox_2)
        self.outputWritten("生成好友成功!\n")
    except Exception as e:
        print(e)

# 生成公众号列表
def generate_mps(self, chatrooms):
    # 清空原有群里列表
    while self.verticalLayout_6.count():
        item = self.verticalLayout_6.takeAt(0)
        widget = item.widget()
        widget.deleteLater()
    chatrooms = chatrooms[2]
    self.chatroom_dict = dict()
    try:
        for c, i in zip(chatrooms, range(len(chatrooms))):
            print(c['NickName'], c['UserName'])
            checkbox = QCheckBox(c['NickName'])
            checkbox.id_ = i
            self.chatroom_dict[c['NickName']] = c['UserName']
            checkbox.stateChanged.connect(self.checkChatRoom)  # 1
            self.verticalLayout_6.addWidget(checkbox)
            #self.horizontalLayout_3.addWidget(self.checkBox_2)
        self.outputWritten("生成公众号成功!\n")
    except Exception as e:
        print(e)

@pyqtSlot()
def on_pushButton_clicked(self):
    """
    # 登录微信 - 线程
    """

    # 登录微信 - 线程
    try:
        self.login_wechat_thread = LoginWechat(
            label=self.textEdit,
            scroll_widget_layout=self.verticalLayout,
            refresh_button=self.pushButton,
            exit_button=self.pushButton_2,
        )
        self.login_wechat_thread.finished_signal.connect(self.generate_chatroom)
        self.login_wechat_thread.finished_signal.connect(self.generate_friends)
        self.login_wechat_thread.finished_signal.connect(self.generate_mps)
        #self.login_wechat_thread.finished_signal.connect(self.generate_chatroom)
        self.login_wechat_thread.start()
    except Exception as e:
        print("执行登录线程出错:", e)
        self.outputWritten("执行登录线程出错:{}\n".format(e))

@pyqtSlot()
def on_pushButton_2_clicked(self):
    """
    注销按钮
    """
    # 设置登录按钮为激活状态
    self.pushButton.setEnabled(True)
    # 在文本控制台中输入
    self.outputWritten("退出微信登录\n")
    # 注销微信登录
    itchat.logout()
    # 设置注销按钮为禁用状态
    self.pushButton_2.setEnabled(False)
    # 更改登陆按钮
    self.pushButton.setText("登录")

if name == ‘main‘:
app = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())

这是UI代码

-- coding: utf-8 --

Form implementation generated from reading ui file ‘E:\python\taobaoKe\cronSendMessage\cronSendMessage.ui’

#

Created by: PyQt5 UI code generator 5.11.2

#

WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(“MainWindow”)
MainWindow.resize(905, 600)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName(“centralWidget”)
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralWidget)
self.verticalLayout_3.setObjectName(“verticalLayout_3”)
self.tabWidget = QtWidgets.QTabWidget(self.centralWidget)
self.tabWidget.setObjectName(“tabWidget”)
self.tab = QtWidgets.QWidget()
self.tab.setObjectName(“tab”)
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.tab)
self.verticalLayout_4.setObjectName(“verticalLayout_4”)
self.checkBox = QtWidgets.QCheckBox(self.tab)
self.checkBox.setObjectName(“checkBox”)
self.verticalLayout_4.addWidget(self.checkBox)
self.tabWidget.addTab(self.tab, “”)
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName(“tab_2”)
self.gridLayout = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout.setObjectName(“gridLayout”)
self.checkBox_2 = QtWidgets.QCheckBox(self.tab_2)
self.checkBox_2.setObjectName(“checkBox_2”)
self.gridLayout.addWidget(self.checkBox_2, 0, 0, 1, 1)
self.tabWidget.addTab(self.tab_2, “”)
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName(“tab_3”)
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.tab_3)
self.verticalLayout_6.setObjectName(“verticalLayout_6”)
self.checkBox_3 = QtWidgets.QCheckBox(self.tab_3)
self.checkBox_3.setObjectName(“checkBox_3”)
self.verticalLayout_6.addWidget(self.checkBox_3)
self.tabWidget.addTab(self.tab_3, “”)
self.verticalLayout_3.addWidget(self.tabWidget)
self.groupBox = QtWidgets.QGroupBox(self.centralWidget)
self.groupBox.setObjectName(“groupBox”)
self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
self.verticalLayout.setObjectName(“verticalLayout”)
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setObjectName(“pushButton”)
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
self.pushButton_2.setObjectName(“pushButton_2”)
self.verticalLayout.addWidget(self.pushButton_2)
self.verticalLayout_3.addWidget(self.groupBox)
self.groupBox_5 = QtWidgets.QGroupBox(self.centralWidget)
self.groupBox_5.setObjectName(“groupBox_5”)
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_2.setObjectName(“verticalLayout_2”)
self.textEdit = QtWidgets.QTextEdit(self.groupBox_5)
self.textEdit.setObjectName(“textEdit”)
self.verticalLayout_2.addWidget(self.textEdit)
self.verticalLayout_3.addWidget(self.groupBox_5)
self.verticalLayout_3.setStretch(0, 80)
self.verticalLayout_3.setStretch(1, 10)
self.verticalLayout_3.setStretch(2, 50)
MainWindow.setCentralWidget(self.centralWidget)

    self.retranslateUi(MainWindow)
    self.tabWidget.setCurrentIndex(2)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    self.checkBox.setText(_translate("MainWindow", "CheckBox"))
    self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "好友列表"))
    self.checkBox_2.setText(_translate("MainWindow", "group"))
    self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "群聊列表"))
    self.checkBox_3.setText(_translate("MainWindow", "CheckBox"))
    self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "公众号列表"))
    self.groupBox.setTitle(_translate("MainWindow", "登陆微信"))
    self.pushButton.setText(_translate("MainWindow", "登陆"))
    self.pushButton_2.setText(_translate("MainWindow", "注销"))
    self.groupBox_5.setTitle(_translate("MainWindow", "消息区"))

if name == “main“:
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

运行操作界面如下
python登录微信获取好友群生成列表_第1张图片

完.

你可能感兴趣的:(python学习笔记)