1. 程式人生 > >PyQt5獲取QWebEngineView的cookie

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_())

程式碼粗糙,有不足的地方希望各位多多包含,也希望各位多多指教!下班嘍~~~