简体   繁体   English

将 cookie 传递给 QWebEngineView

[英]Passing cookies to QWebEngineView

so I have a python code which converts url to pdf like below所以我有一个python代码,可以将url转换为pdf,如下所示

import sys
from PyQt5 import QtWidgets, QtWebEngineWidgets
from PyQt5.QtCore import QUrl, QTimer
from PyQt5.QtGui import QPageLayout, QPageSize
from PyQt5.QtWidgets import QApplication
import argparse



def _fullScreenRequested(request):
    request.accept()
    loader.showFullScreen()

def main():
    url = ''
    parser = argparse.ArgumentParser(description="Just an example", formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument("--url", help="Type url")
    args = parser.parse_args()
    config = vars(args)
    url = config['url']


    app = QtWidgets.QApplication(sys.argv)
    loader = QtWebEngineWidgets.QWebEngineView()
    loader.setZoomFactor(1)
    layout = QPageLayout()
    layout.setPageSize(QPageSize(QPageSize.A4Extra))
    layout.setOrientation(QPageLayout.Portrait)
    loader.load(QUrl(url))
    loader.page().pdfPrintingFinished.connect(lambda *args: QApplication.exit())

    def emit_pdf(finished):
        # loader.page().printToPdf("test.pdf", pageLayout=layout)
        QTimer.singleShot(2000, lambda: loader.page().printToPdf("test.pdf", pageLayout=layout))

    loader.loadFinished.connect(emit_pdf)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

I have a cookie.txt with the content below我有一个 cookie.txt,内容如下

    [
    {
        "domain": "www.udemy.com",
        "expirationDate": 1714906174.734258,
        "hostOnly": true,
        "httpOnly": false,
        "name": "snexid",
        "path": "/",
        "sameSite": null,
        "secure": false,
        "session": false,
        "storeId": null,
        "value": "c6sdf99-1sdab-4sd1-86ff-2dc8sfs24511"
    }
]

is there a way to pass cookie.txt to QWebEngineView or QtWebEngineWidgets ??有没有办法将 cookie.txt 传递给QWebEngineViewQtWebEngineWidgets

ok none of the suggestions woked.好的,没有任何建议被唤醒。

But this example worked --> https://github.com/PyQt5/PyQt/blob/master/QWebEngineView/SetCookies.py但是这个例子有效——> https://github.com/PyQt5/PyQt/blob/master/QWebEngineView/SetCookies.py

This is my full code这是我的完整代码

import sys
from PyQt5 import QtWidgets, QtWebEngineWidgets
from PyQt5.QtCore import QUrl, QTimer, QDateTime, Qt
from PyQt5.QtGui import QPageLayout, QPageSize
from PyQt5.QtWidgets import QApplication
from PyQt5.QtNetwork import QNetworkCookie
import argparse
import os
import json

cookie_file = None

class Window(QtWebEngineWidgets.QWebEngineView):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.cookieStore = self.page().profile().cookieStore()

    def initCookies(self, cookie_file):
        if cookie_file:
            with open("output/"+cookie_file, encoding='utf8') as f:
                cookies = json.load(f)

            for cookie in cookies:
                qcookie = QNetworkCookie()
                qcookie.setName(cookie.get('name', '').encode())
                qcookie.setValue(cookie.get('value', '').encode())
                qcookie.setDomain(cookie.get('domain', ''))
                qcookie.setPath(cookie.get('path', ''))
                qcookie.setExpirationDate(
                    QDateTime.fromString(str(cookie.get('expirationDate', 0)),
                                         Qt.ISODate))
                qcookie.setHttpOnly(cookie.get('httpOnly', False))
                qcookie.setSecure(cookie.get('secure', False))
                self.cookieStore.setCookie(qcookie, QUrl())


def main():
    file_name = 'ABC123.pdf'
    parser = argparse.ArgumentParser(description="Just an example", formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument("--url", help="Type url", required=True)
    parser.add_argument("--output", help="Type output pdf file name")
    parser.add_argument("--cookie", help="Type cookie file name")
    args = parser.parse_args()
    config = vars(args)
    url = config['url']
    output = config['output']
    cookie = config['cookie']
    if output:
        file_name = output
    if cookie:
        cookie_file = cookie

    app = QtWidgets.QApplication(sys.argv)
    loader = Window()
    loader.initCookies(cookie_file)
    loader.setZoomFactor(1)
    layout = QPageLayout()
    layout.setPageSize(QPageSize(QPageSize.A4Extra))
    layout.setOrientation(QPageLayout.Portrait)
    loader.load(QUrl(url))
    loader.page().pdfPrintingFinished.connect(lambda *args: QApplication.exit())

    def emit_pdf(finished):
        directory = "/htmltopdf/output/"
        if not os.path.exists(directory):
            os.makedirs(directory)
        QTimer.singleShot(2000, lambda: loader.page().printToPdf(directory+file_name, pageLayout=layout))


    loader.loadFinished.connect(emit_pdf)
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM