Skip to main content
 首页 » 编程设计

python之如何将 QWebEngineProfile 设置为 QWebEngineView

2024年08月19日46kerrycode

我想将不同的 QWebEngineProfiles 设置为不同的 QWebEngineViews,这意味着每个 View 都有自己的 cookie 存储。我找不到关于它的任何文档,因此非常感谢所有帮助。 将独立 cookie 存储设置为独立 webview 的另一种方法的任何建议也会有所帮助。干杯。

代码如下(此处连接信号格式不正确,但请放心,它在实际代码中是正确的):

from PyQt5.QtCore import * 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import * 
from PyQt5.QtWebEngineWidgets import * 
import sys 
 
class MainWindow(QMainWindow): 
 
    def __init__(self, *args, **kwargs): 
        super(MainWindow, self).__init__(*args,**kwargs) 
        self.browser={} 
        self.cookiestore={} 
        self.page={} 
        No = input("No: ") 
        for i in range(int(No)): 
            self.browser[str(i)] = QWebEngineView() 
            storagename = str(i) 
            self.cookiestore[str(i)] = QWebEngineProfile(storagename, self.browser[str(i)]) 
            self.page[str(i)] = QWebEnginePage(self.cookiestore[str(i)], self.browser[str(i)]) 
            self.browser[str(i)].setPage(self.page[str(i)]) 
            self.browser[str(i)].load(QUrl("https://www.google.com")) 
      self.browser[str(i)].loadFinished.connect(lambda:self._loaded(str(i))) 
 
    def _loaded(self, No): 
        self.browser[No].page().toHtml(self._callable) 
    def _callable(self, data): 
        self.html = data 
        if "" in self.html: 
            print("Done") 
        else: 
            print("wait") 
 
app = QApplication(sys.argv) 
window = MainWindow() 
app.exec_() 

请您参考如下方法:

如果你想建立一个 QWebEngineProfile 到一个 QWebEngineView 你必须通过一个 QWebEnginePage 来完成它,如下所示:

webview = QWebEngineView() 
profile = QWebEngineProfile("somestorage", webview) 
webpage = QWebEnginePage(profile, webview) 
webview.setPage(webpage) 

例子:

from PyQt5.QtCore import QUrl 
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile, QWebEnginePage 
from PyQt5.QtWidgets import QApplication 
 
if __name__ == '__main__': 
    import sys 
 
    app = QApplication(sys.argv) 
    views = [] 
    for i in range(5): 
        webview = QWebEngineView() 
        profile = QWebEngineProfile(f"storage-{i}", webview) 
        webpage = QWebEnginePage(profile, webview) 
        webview.setPage(webpage) 
        webview.load(QUrl("https://stackoverflow.com/questions/48142341/how-to-set-a-qwebengineprofile-to-a-qwebengineview")) 
        webview.show() 
        views.append(webview) 
    sys.exit(app.exec_())