Example #1
0
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)

        # 用户1
        self.webView1 = QWebEngineView(self)
        profile1 = QWebEngineProfile('storage1', self.webView1)
        profile1.setPersistentStoragePath('Tmp/Storage1')
        print(profile1.cookieStore())
        # 如果要清除cookie
        # cookieStore = profile1.cookieStore()
        # cookieStore.deleteAllCookies()
        # cookieStore.deleteSessionCookies()
        page1 = QWebEnginePage(profile1, self.webView1)
        self.webView1.setPage(page1)
        self.addTab(self.webView1, '用户1')

        # 用户2
        self.webView2 = QWebEngineView(self)
        profile2 = QWebEngineProfile('storage2', self.webView2)
        profile2.setPersistentStoragePath('Tmp/Storage2')
        print(profile2.cookieStore())
        page2 = QWebEnginePage(profile2, self.webView2)
        self.webView2.setPage(page2)
        self.addTab(self.webView2, '用户2')

        self.webView1.load(QUrl('https://v.qq.com'))
        self.webView2.load(QUrl('https://v.qq.com'))
Example #2
0
 def __init__(self, parent):
     super().__init__(parent)
     self.webview = QWebEngineView()
     profile = QWebEngineProfile(self.webview)
     profile.setPersistentCookiesPolicy(
         QWebEngineProfile.NoPersistentCookies)
     profile.setPersistentStoragePath(
         str(configFolder / "QtWebEngine" / "Storage" / "OffTheRecord"))
     self.page = self.CustomPage(profile, self.webview)
     self.page.loadFinished.connect(self.checkURL)
     self.webview.setPage(self.page)
     self.webview.setUrl(QUrl("https://deezer.com/login"))
     layout = QVBoxLayout()
     layout.addWidget(self.webview)
     self.setLayout(layout)
     self.arl = None
     self.exec_()
Example #3
0
class MainWindow(QMainWindow):
    selectDownloadFolder_trigger = pyqtSignal()
    appLogin_trigger = pyqtSignal()

    class MainWebpage(QWebEnginePage):
        def __init__(self, profile, parent):
            super().__init__(profile, parent)
            actions = [
                QWebEnginePage.Stop, QWebEnginePage.Reload,
                QWebEnginePage.ReloadAndBypassCache,
                QWebEnginePage.PasteAndMatchStyle,
                QWebEnginePage.OpenLinkInThisWindow,
                QWebEnginePage.OpenLinkInNewWindow,
                QWebEnginePage.OpenLinkInNewTab,
                QWebEnginePage.OpenLinkInNewBackgroundTab,
                QWebEnginePage.DownloadLinkToDisk,
                QWebEnginePage.DownloadImageToDisk,
                QWebEnginePage.DownloadMediaToDisk,
                QWebEnginePage.InspectElement, QWebEnginePage.RequestClose,
                QWebEnginePage.SavePage, QWebEnginePage.ViewSource
            ]
            for a in actions:
                self.action(a).setVisible(False)

        class ExternalWebpage(QWebEnginePage):
            def __init__(self, parent):
                super().__init__(parent)
                self.urlChanged.connect(self.open_browser)

            def open_browser(self, url):
                page = self.sender()
                webbrowser.open(url.toString(), 2, True)
                page.deleteLater()

        def createWindow(self, _type):
            page = None
            if _type == QWebEnginePage.WebBrowserTab:
                page = self.ExternalWebpage(self)
            return page

    def __init__(self, title, url, x=None, y=None, w=800, h=600):
        super().__init__()
        startMaximized = False
        if w == -1 or h == -1:
            self.resize(800, 600)
            startMaximized = True
        else:
            self.resize(w, h)
        self.setWindowTitle(title)
        self.setWindowIcon(QIcon(str(appDir / 'icon.ico')))
        self.setMinimumSize(800, 600)
        self.webview = QWebEngineView()
        self.profile = QWebEngineProfile("Default", self.webview)
        self.profile.setCachePath(
            str(configFolder / "QtWebEngine" / "Cache" / "Default"))
        self.profile.setPersistentStoragePath(
            str(configFolder / "QtWebEngine" / "Storage" / "Default"))
        self.page = self.MainWebpage(self.profile, self.webview)
        self.page.loadFinished.connect(self.finishLoading)
        self.webview.setPage(self.page)
        self.setCentralWidget(self.webview)
        self.url = url

        if dev:
            self.dev_tools = QWebEngineView()
            self.webview.page().setDevToolsPage(self.dev_tools.page())
            self.dev_tools.show()

        self.downloadFolder = None
        self.selectDownloadFolder_trigger.connect(self.selectDownloadFolder)
        self._selectDownloadFolder_semaphore = Semaphore(0)

        self.arl = None
        self.appLogin_trigger.connect(self.appLogin)
        self._appLogin_semaphore = Semaphore(0)

        if x is None or y is None or startMaximized:
            center = QApplication.desktop().availableGeometry().center(
            ) - self.rect().center()
            self.move(center.x(), center.y())
        else:
            self.move(x, y)

        if startMaximized: self.showMaximized()

    def showWindow(self):
        self.webview.setUrl(QUrl(self.url))
        self.show()

    def selectDownloadFolder(self):
        filename = QFileDialog.getExistingDirectory(
            self, "Select Download Folder", options=QFileDialog.ShowDirsOnly)
        self.downloadFolder = filename.replace('/', pathSep)
        self._selectDownloadFolder_semaphore.release()

    def appLogin(self):
        self.arl = None
        loginWindow = LoginWindow(self)
        self.arl = loginWindow.arl
        self._appLogin_semaphore.release()
        loginWindow.page.deleteLater()
        loginWindow.webview.deleteLater()
        loginWindow.deleteLater()

    def closeEvent(self, event):
        x = int(self.x())
        y = int(self.y())
        w = int(self.width())
        h = int(self.height())
        if x < 0: x = 0
        if y < 0: y = 0
        if self.isMaximized():
            w = -1
            h = -1
        with open(configFolder / '.UIposition', 'w') as f:
            f.write("|".join([str(x), str(y), str(w), str(h)]))
        self.page.deleteLater()
        event.accept()

    def finishLoading(self, ok):
        if ok:
            self.webview.page().runJavaScript(
                "window.dispatchEvent(new Event('pywebviewready'))")