PyQt5獲取QWebEngineView的cookie
阿新 • • 發佈:2018-12-22
由於工作需求,需要獲取自己寫的QWebEngineView的cookie,搞了兩天,百度了好久,找了很多方法,都沒有解決,PyQt5的文件實在是太少了,有的基本上都是入門的,高階一點的元件講的太少,後來有幸看到一位大神的GitHub,終於有了點思路,先祭上大神的GitHub地址:
本文也是根據大神這個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_())
程式碼粗糙,有不足的地方希望各位多多包含,也希望各位多多指教!下班嘍~~~