网上很多都没讲全,对于刚了解的朋友不太友好,自己整理下记录下pyside6的QWebEngineView如何使用并保存和读取cookie的,解决当程序退出后重复登录的问题:
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkCookie,QNetworkCookieJar
from PySide6.QtCore import QFile, QIODevice, QTextStream,QUrl,QByteArray
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.weburl="https://fxg.jinritemai.com/login/common"
self.view = QWebEngineView()
self.setCentralWidget(self.view)
#self.save_cookies()
self.load_cookies()
# 加载一个网页,以便产生一些 cookies
#self.view.page().load(QUrl("https://fxg.jinritemai.com/ffa/morder/order/list"))
self.view.page().load(QUrl(self.weburl))
#self.cookie_store.cookieAdded.connect(self.handlecookie))
#页面加载完成执行
self.view.page().loadFinished.connect(self.on_page_load_finished)
# 页面加载完成执行
def on_page_load_finished(self,txt):
# 需要确保页面加载完成后保存cookies
self.save_cookies()
#self.view.page().runJavaScript("document.readyState;",0, self.load_cookies)
#保存cookie
def save_cookies(self):
# 获取当前使用的 WebEngineProfile
self.cookie_store.loadAllCookies()
def load_cookies(self):
profile = self.view.page().profile()
self.cookie_store = profile.cookieStore()
with open('cookies.txt', 'r') as file:
for line in file:
# 创建一个cookie
cookie = QNetworkCookie()
mycookie=cookie.parseCookies(line.encode("utf-8"))
print(mycookie)
# 将cookie添加到cookie存储
self.cookie_store.setCookie(mycookie[0])
self.cookie_store.loadAllCookies()
def handlecookie(self,cookie):
cookiedata=str(cookie.toRawForm().data(),encoding="utf-8")
# # #打开一个文件用于写入 cookies
with open("cookies.txt", 'a', encoding="utf-8") as fw: # 循环写入
fw.write(cookiedata+"\n")
# 创建应用实例
app = QApplication([])
# 创建主窗口实例
window = MainWindow()
window.show()
# 运行应用
app.exec()