python利用PyQt5制作QQ空间登入客户端

python利用PyQt5制作QQ空间登入客户端

前言:
由于PyQt5的资料太少,加上能力有限,耗时一天时间做了个客户端,存有Bug,以及只有登录和获取cookies的功能,现在做个学习记录吧,后期有时间再来完善。

第三方库安装好后,复制粘贴即可运行。

import sys
import requests
from PyQt5.Qt import *
from PyQt5.QtWebEngineWidgets import QWebEngineView,QWebEngineProfile
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

class MainWindows(QWidget):

    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.setWindowTitle("测试")
        self.setWindowIcon(QIcon("n6.ico"))
        self.resize(800,800)#主窗口大小
        self.setFixedSize(800, 800)  #主窗口大小不能随意放缩

        self.setup_ui()

    def setup_ui(self):
        self.Brows()
        self.Cookie_btn()
        self.textLine()
        self.loadJS()
        self.showTX()

    def showTX(self):
        self.lab= QLabel(self)
        self.lab.setText("")
        self.lab.resize(100, 100)
        self.lab.move(50, 50)
        # self.lab.setPixmap(QPixmap('./Info.png'))

    def textLine(self):
        self.pte = QPlainTextEdit(self)
        # self.pte.setPlainText("111")
        self.pte.resize(300, 300)
        self.pte.move(300, 250)

    def loadJS(self):
        self.ld=QPushButton(self)
        self.ld.setText("点击获取基本信息")
        self.ld.move(150,0)
        # self.btn_get.clicked.connect(self.run_js)
        self.ld.clicked.connect(self.downUserInfo)

    def Cookie_btn(self):
        self.btn_get = QPushButton(self)  # 创建一个按钮点击获取cookie
        self.btn_get.setText("获取cookie")
        self.btn_get.move(50,0)
        self.btn_get.clicked.connect(self.get_cookies)  # 绑定按钮点击事件

    def Brows(self):
        self.web = MyWebEngineView(self)  # 创建浏览器组件对象,并且主窗口为父控件
        self.web.resize(260, 360)  # 设置浏览器大小
        self.web.move(20,30)
        url = 'https://qzone.qq.com/'
        self.web.load(QUrl(url))
        self.web.show()  # 最后让页面显示出来
        #####web页面加载完毕,调用函数
        self.web.page().loadFinished.connect(self.run_js)

    #运行js脚本,有回调
    def run_js(self):
        js_string = '''
        function myFunction()
        {
            
            var img_url= document.getElementById('QM_OwnerInfo_Icon').src;
            return img_url;
        }
        myFunction();
        '''
        self.web.page().runJavaScript(js_string, self.js_callback)

    # 回调函数
    def js_callback(self, result):
        # print(result)
        self.rs_succ=result
        print(self.rs_succ)
        # QMessageBox.information(self, "提示", str(result))

    def downUserInfo(self):
        url=self.rs_succ
        headers = {
            'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
        }
        if url == 'None':
            print("为None")
        else:
            print("这是下载函数,url是---", url)
            response = requests.get(url,headers=headers)
            with open("Info.png", "wb") as fp:
                fp.write(response.content)
                fp.close()
            print("个人头像已保存!")
            self.web.deleteLater()#销毁子控件
            self.lab.setPixmap(QPixmap('./Info.png'))

    def get_cookies(self):
        cookie = self.web.get_cookie() #获取浏览器得到的cookies
        print('获取到cookie: ', cookie)
        self.pte.setPlainText(str(cookie))
        # self.web.deleteLater()#删除浏览器子控件

# 创建自己的浏览器控件,继承自QWebEngineView
class MyWebEngineView(QWebEngineView):
    def __init__(self, *args, **kwargs):
        super(MyWebEngineView, self).__init__(*args, **kwargs)
        # 绑定cookie被添加的信号槽
        QWebEngineProfile.defaultProfile().cookieStore().cookieAdded.connect(self.onCookieAdd)
        self.cookies = {}  # 存放cookie字典

    def onCookieAdd(self, cookie):  # 处理cookie添加的事件
        name = cookie.name().data().decode('utf-8')  # 先获取cookie的名字,再把编码处理一下
        value = cookie.value().data().decode('utf-8')  # 先获取cookie值,再把编码处理一下
        self.cookies[name] = value  # 将cookie保存到字典里

    # 获取cookie
    def get_cookie(self):
        cookie_str = self.cookies  # 字典的形式返回
        return cookie_str

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win_root=MainWindows()
    win_root.show()
    sys.exit(app.exec_())

最后可以关注一下我个人微信公众号,不定期更新一些好用的资源以及生活上的点点滴滴~~

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值