所以我有一个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()
我有一个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"
}
]
是否有办法传递cookie.txt到QWebEngineView
或QtWebEngineWidgets
??
好吧,这些建议都没用。
但是这个例子成功了——>https://github.com/PyQt5/PyQt/blob/master/QWebEngineView/SetCookies.py
这是我的完整代码
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()