首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QWebEnginePage时的奇数JS错误

使用QWebEnginePage时的奇数JS错误
EN

Stack Overflow用户
提问于 2022-04-15 00:23:49
回答 1查看 64关注 0票数 0

因此,我一直在开发一个使用PyQt6-WebEngine进行身份验证的系统,该系统可以在javascript重定向之后发出web请求,因为Python中的请求不支持这一点。我制作了一个简单的请求脚本:

代码语言:javascript
复制
import sys
import json

# import PyQt6
import PyQt6
from PyQt6.QtCore import QUrl, QByteArray
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWebEngineCore import QWebEnginePage, QWebEngineHttpRequest


class __Page__(QWebEnginePage):
    def __init__(self, app, url=None, method=None, headers=None, data=None) -> None:
        # Initiate the application
        self.app = app
        super().__init__()

        # Make sure the necessary variables aren't empty
        if url == None:
            raise ValueError("Passed url variable cannot be empty")
        if method == None:
            raise ValueError("Passed method variable cannot be empty")

        # Creates the main request variable
        self.req = QWebEngineHttpRequest()

        # Assign the variables used to setup the request later in self.setupRequest()
        self.method = method
        self.qurl = url
        self.headers = headers

        # Only assign this if the method is post
        if self.method == "post":
            self.postData = data
        else:
            self.postData = None

        # Setup the request
        self.setupRequest()

        # Create a new html variable and stuff, then load the request and launch the app
        self.html = ""
        self.loadFinished.connect(self.finish)
        self.load(self.req)
        self.app.exec()

    def setupRequest(self):

        # Assign the method variable
        if self.method == "get":
            method = QWebEngineHttpRequest.Method.Get
        elif self.method == "post":
            method = QWebEngineHttpRequest.Method.Post
        else:
            raise ValueError(
                "Expected 'get' or 'post' methods, but received '{}'".format(
                    self.method
                )
            )

        # Assign the method variable to the request method
        self.req.setMethod(method)
        self.req.setUrl(QUrl(self.qurl))

        # Assign the headers
        if self.headers != None:
            for i in self.headers:
                self.req.setHeader(
                    QByteArray(list(i.keys())[0].encode("ascii")),
                    QByteArray(list(i.values())[0].encode("ascii")),
                )

        # Assign the postData if the method is post
        if self.method == "post":
            self.req.setPostData(bytes(self.postData, "utf-8"))

    # This part is a bit over my head
    def finish(self):
        self.html = self.toHtml(self.callHtml)
        self.url = self.url()
        self.deleteLater()
        self.app.quit()

    def callHtml(self, html_str):
        self.html = html_str


class app:
    def __init__(self) -> None:
        self.app = QApplication(sys.argv)

    def requestPage(self, url=None, method=None, headers=None, data=None):
        page = __Page__(
            app=self.app, url=url, method=method, headers=headers, data=data
        )
        return page


def main():
    webapp = app()
    request = webapp.requestPage(url="https://google.com", method="get")


if __name__ == "__main__":
    main()

这方面的问题是,它一直在输出中给我JS错误,它突然开始执行,而且没有明显的原因。对于Google.com,它给出了1-2个错误,比如:js: Error with Permissions-Policy header: Unrecognized feature: 'ch-ua-full-version-list'.和其他网站,它已经把我交给了30+。

除了混乱之外,这本身不会那么烦人,但我还有另一个问题(我不太确定这是这个脚本的错误,但它几乎与JS错误问题相同),在这个问题上,所请求的网站根本不会返回任何html。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-02 14:19:50

我最终解决了这个问题: JS错误与请求失败无关。我刚刚发出了无效的请求(标题问题等等)。我仍然不知道为什么这些错误似乎是随机出现的,也许我只是错误地得出了这个结论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71878869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档