PyQt5获取QWebEngineView的cookie

由于工作需求,需要获取自己写的QWebEngineView的cookie,搞了两天,百度了好久,找了很多方法,都没有解决,PyQt5的文档实在是太少了,有的基本上都是入门的,高阶一点的组件讲的太少,后来有幸看到一位大神的GitHub,终于有了点思路,先祭上大神的GitHub地址:

https://github.com/892768447/PyQt/blob/master/%E6%B5%8F%E8%A7%88%E5%99%A8%E8%8E%B7%E5%8F%96Cookie/WebEngineView.py

本文也是根据大神这个demo写的,不过是更简化了一点。大神的代码看得有点玄乎,而且不直观,于是我就加了个界面

先上效果图:

先来个界面

 

 

接着是结果:

上面是运行的结果,再来个浏览器的图:

怎么样,程序获取的cookie是不是和浏览器的差不多呢?好了,废话不多说,上代码,一切尽在代码中:

import sys

from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton


# 先来个窗口
class window(QWidget):
    def __init__(self):
        super().__init__()
        self.setup()

    def setup(self):
        self.box = QVBoxLayout(self)                      # 创建一个垂直布局来放控件
        self.btn_get = QPushButton('点击获取cookies')   # 创建一个按钮涌来了点击获取cookie
        self.btn_get.clicked.connect(self.get_cookie)     # 绑定按钮点击事件
        self.web = MyWebEngineView()                      # 创建浏览器组件对象
        self.web.resize(800, 600)                         # 设置大小
        self.web.load(QUrl("https://www.baidu.com"))  # 打开百度页面来测试
        self.box.addWidget(self.btn_get)                  # 将组件放到布局内,先在顶部放一个按钮
        self.box.addWidget(self.web)                      # 再放浏览器
        self.web.show()                                   # 最后让页面显示出来

    def get_cookie(self):
        cookie = self.web.get_cookie()
        print('获取到cookie: ', cookie)


# 创建自己的浏览器控件,继承自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 = ''
        for key, value in self.cookies.items():         # 遍历字典
            cookie_str += (key + '=' + value + ';')     # 将键值对拿出来拼接一下
        return cookie_str                               # 返回拼接好的字符串


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = window()
    w.show()
    sys.exit(app.exec_())

代码粗糙,有不足的地方希望各位多多包含,也希望各位多多指教!下班喽~~~

要在PyQt5中嵌入网页并获取登录成功的cookie,你可以使用QWebEngineProfile和QWebEngineCookieStore类来实现。以下是一个示例代码,演示了如何在PyQt5中嵌入网页并获取登录成功的cookie: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtWebEngineCore import QWebEngineProfile class MainWindow(QMainWindow): def __init__(self): super().__init__() # 创建一个QWebEngineView对象 self.webview = QWebEngineView() # 创建一个QWebEngineProfile对象 self.profile = QWebEngineProfile.defaultProfile() # 获取QWebEngineCookieStore对象 self.cookie_store = self.profile.cookieStore() # 加载网页 self.webview.load('https://www.example.com') # 将QWebEngineView对象设置为主窗口的中央部件 self.setCentralWidget(self.webview) # 连接cookieAdded信号,用于处理新添加的cookie self.cookie_store.cookieAdded.connect(self.handle_cookie) def handle_cookie(self, cookie): # 处理cookie if cookie.name().data().decode() == 'login_success': print('登录成功!') print('Cookie Name:', cookie.name().data().decode()) print('Cookie Value:', cookie.value().data().decode()) # 弹出消息框显示登录成功 QMessageBox.information(self, '登录成功', '登录成功!') if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个示例中,我们创建了一个MainWindow类,继承自QMainWindow。在初始化方法中,我们创建了一个QWebEngineView对象,并使用load()方法加载指定的网页。然后,我们获取了默认的QWebEngineProfile对象,并从中获取QWebEngineCookieStore对象。 我们还定义了一个handle_cookie方法,用于处理新添加的cookie。在handle_cookie方法中,我们检查cookie的名称是否为'login_success',如果是则表示登录成功,我们打印出cookie的名称和值,并弹出一个消息框显示登录成功。 你需要根据实际情况修改示例代码,比如将网页URL替换成实际的登录页面。并根据登录成功后的cookie名称来判断是否登录成功。 希望这个示例对你有帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值