接受或删除Cookie关于使用PyQt5 QtWebEngineWidgets将HTML转换为PDF的通知

2024-06-02 05:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在成功地将HTML转换为PDF(或打印为PDF)。但是,Cookie和隐私政策通知打印在每页的底部。 我如何删除此通知或接受Cookie?(适用于任何网站域的解决方案)

enter image description here

import os
import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets


def html_to_pdf(html, pdf):
    app = QtWidgets.QApplication(sys.argv)

    page = QtWebEngineWidgets.QWebEnginePage()

    def handle_print_finished(filename, status):
        print("finished", filename, status)
        QtWidgets.QApplication.quit()

    def handle_load_finished(status):
        if status:
            page.printToPdf(pdf)
        else:
            print("Failed")
            QtWidgets.QApplication.quit()

    page.pdfPrintingFinished.connect(handle_print_finished)
    page.loadFinished.connect(handle_load_finished)
    page.setUrl(QtCore.QUrl(html))
    app.exec_()


if __name__ == "__main__":
    html_to_pdf("https://stackoverflow.com/questions/2530/how-do-you-disable-browser-autocomplete-on-web-form-field-input-tag?rq=1", "test.pdf")

1条回答
网友
1楼 · 发布于 2024-06-02 05:24:00

一个可能的解决方案是实现一个点击按钮的Js脚本,如以下示例所示:

import os
import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets


def html_to_pdf(html, pdf):
    app = QtWidgets.QApplication(sys.argv)

    page = QtWebEngineWidgets.QWebEnginePage()

    def handle_print_finished(filename, status):
        print("finished", filename, status)
        QtWidgets.QApplication.quit()

    def handle_load_finished(status):
        if status:
            execute_js()
        else:
            print("Failed")
            QtWidgets.QApplication.quit()

    def handle_run_js(status):
        if status:
            QtCore.QTimer.singleShot(1000, print_pdf)
        else:
            QtCore.QTimer.singleShot(1000, execute_js)

    def execute_js():
        page.runJavaScript(
            """
            (function () {
                var elements = document.getElementsByClassName("js-consent-banner-hide")
                if(elements.length > 0){
                    elements[0].click()
                    return true;
                }
                return false;
            })();
            """,
            handle_run_js,
        )

    def print_pdf():
        page.printToPdf(pdf)

    page.pdfPrintingFinished.connect(handle_print_finished)
    page.loadFinished.connect(handle_load_finished)
    page.setUrl(QtCore.QUrl(html))
    app.exec_()


if __name__ == "__main__":
    html_to_pdf(
        "https://stackoverflow.com/questions/2530/how-do-you-disable-browser-autocomplete-on-web-form-field-input-tag?rq=1",
        "test.pdf",
    )

相关问题 更多 >