如何将 QWebEngineProfile 设置为 QWebEngineView

Posted

技术标签:

【中文标题】如何将 QWebEngineProfile 设置为 QWebEngineView【英文标题】:How to set a QWebEngineProfile to a QWebEngineView 【发布时间】:2018-01-07 22:58:11 【问题描述】:

我想为不同的 QWebEngineViews 设置不同的 QWebEngineProfiles,这意味着每个视图都有自己的 cookie 存储。我找不到任何有关它的文档,因此将不胜感激所有帮助。 任何将独立 cookie 存储设置为独立 web 视图的其他方法的任何建议也将有所帮助。干杯。

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

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

【问题讨论】:

【参考方案1】:

如果你想建立一个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://***.com/questions/48142341/how-to-set-a-qwebengineprofile-to-a-qwebengineview"))
        webview.show()
        views.append(webview)
    sys.exit(app.exec_())

【讨论】:

我已经这样做了,但是每个 QWebEngineView 仍然在彼此之间共享 cookie。我该如何阻止这种情况发生。每个 QWebEngineView 都应该有自己的 cookie 存储。 @Kermit 为什么说你们共享相同的 cookie?在我的情况下,对于每个配置文件都会生成一个新文件夹,用于存储您各自的 cookie。您是否为每个配置文件建立了存储名称? @Kermit 我刚刚查看了每个配置文件的 cookie,它们不同,它们不共享它们。 @Kermit 本质上和我做的一样,虽然我不喜欢输入(),但是我亲自检查了cookie,它们是不同的。您如何验证它们是否相同? @Kermit 我需要一个反馈来帮助你

以上是关于如何将 QWebEngineProfile 设置为 QWebEngineView的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QWebEngineUrlRequestInterceptor

使用 QtWebEngine 将图像保存到磁盘

C4D如何将图片设置为文件背景?

如何将BIOS的语言设置为中文?

如何将边缘设置为零?

如何将整个标题视图设置为 UICollectionView?