接受或删除 Cookie 关于使用 PyQt5 QtWebEngineWidgets 将 HTML 转换为 PDF 的通知
Posted
技术标签:
【中文标题】接受或删除 Cookie 关于使用 PyQt5 QtWebEngineWidgets 将 HTML 转换为 PDF 的通知【英文标题】:Accept or Remove Cookies Notice on converting HTML to PDF with PyQt5 QtWebEngineWidgets 【发布时间】:2021-07-13 14:42:17 【问题描述】:我已成功将 html 转换为 PDF(或打印为 pdf)。但是,Cookies 和隐私政策通知打印在每页的底部。 如何删除此通知或接受 cookie? (任何网站域的解决方案)
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://***.com/questions/2530/how-do-you-disable-browser-autocomplete-on-web-form-field-input-tag?rq=1", "test.pdf")
【问题讨论】:
【参考方案1】:一种可能的解决方案是实现一个点击按钮的 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://***.com/questions/2530/how-do-you-disable-browser-autocomplete-on-web-form-field-input-tag?rq=1",
"test.pdf",
)
【讨论】:
此解决方案有效,但仅适用于 *** 域。它对我部分有用,谢谢!任何网站的通用解决方案的任何想法? QtWebEngineWidgets 可以自动接受/忽略所有 cookie 吗? @AlexandreStrapacaoG.Vianna 没有通用方法,因为出于安全原因,您必须单击该按钮。如果您在类中找到按钮或按钮名称,那么您可以应用我的解决方案。 知道了! @eyllanesc 出了点问题,现在我收到此错误消息:js:与yahoo.com 的跨站点资源关联的 cookie 设置为没有SameSite
属性。如果设置了SameSite=None
和Secure
,Chrome 的未来版本将只提供带有跨站点请求的cookie。您可以在应用程序>存储>Cookies 下的开发人员工具中查看 cookie,并在 chromestatus.com/feature/5088147346030592 和 chromestatus.com/feature/5633521622188032 查看更多详细信息。 js:与everesttech.net 的跨站点资源关联的 cookie 被设置为 w...以上是关于接受或删除 Cookie 关于使用 PyQt5 QtWebEngineWidgets 将 HTML 转换为 PDF 的通知的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Objective-C 中要求用户接受或拒绝 WKWebView 网站的 cookie