欢迎访问宙启技术站
智能推送

Python中使用QWebEnginePage()实现浏览器代理设置

发布时间:2023-12-18 03:39:23

在Python中使用QWebEnginePage类可以很方便地实现浏览器代理设置。QWebEnginePage是Qt5中的一个类,用于实现Web浏览器功能。

首先,需要导入PyQt5库中的QWebEnginePage类:

from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebKitWidgets import QWebEnginePage

接下来,创建一个自定义的QWebEnginePage类,继承自QWebEnginePage,并重写其中的createRequest方法,用于设置代理:

class CustomWebEnginePage(QWebEnginePage):
    def createRequest(self, operation, request, data):
        request.setRawHeader(b"User-Agent", b"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3")
        request.setRawHeader(b"Accept-Language", b"en-US,en;q=0.9")
        request.setRawHeader(b"Accept", b"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
        request.setRawHeader(b"Accept-Encoding", b"gzip, deflate")
        request.setRawHeader(b"Cache-Control", b"max-age=0")
        request.setRawHeader(b"Connection", b"keep-alive")

        proxy = "http://127.0.0.1:8080"  # 设置代理 IP 和端口
        proxy = QNetworkProxy(QNetworkProxy.HttpProxy, proxy)
        QNetworkProxy.setApplicationProxy(proxy)

        return super().createRequest(operation, request, data)

在createRequest方法中,首先设置了一些常用的请求头信息,然后设置了代理IP和端口。

接下来,在我们的主程序中创建一个QWebEngineView对象,并将其绑定到我们自定义的QWebEnginePage对象:

app = QApplication(sys.argv)
webEnginePage = CustomWebEnginePage()
webView = QWebEngineView()
webView.setPage(webEnginePage)

最后,加载一个URL并显示WebView:

url = "https://www.example.com"  # 你要访问的网站
webView.load(QUrl(url))
webView.show()

sys.exit(app.exec_())

以上就是使用QWebEnginePage实现浏览器代理设置的整个过程。需要注意的是,代理的设置是通过QNetworkProxy类实现的,这样在所有的请求中都会使用设置的代理。

完整的代码如下:

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtWebKitWidgets import QWebEnginePage, QWebEngineView
from PyQt5.QtNetwork import QNetworkProxy

class CustomWebEnginePage(QWebEnginePage):
    def createRequest(self, operation, request, data):
        request.setRawHeader(b"User-Agent", b"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3")
        request.setRawHeader(b"Accept-Language", b"en-US,en;q=0.9")
        request.setRawHeader(b"Accept", b"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
        request.setRawHeader(b"Accept-Encoding", b"gzip, deflate")
        request.setRawHeader(b"Cache-Control", b"max-age=0")
        request.setRawHeader(b"Connection", b"keep-alive")

        proxy = "http://127.0.0.1:8080"  # 设置代理 IP 和端口
        proxy = QNetworkProxy(QNetworkProxy.HttpProxy, proxy)
        QNetworkProxy.setApplicationProxy(proxy)

        return super().createRequest(operation, request, data)

app = QApplication(sys.argv)
webEnginePage = CustomWebEnginePage()
webView = QWebEngineView()
webView.setPage(webEnginePage)

url = "https://www.example.com"  # 你要访问的网站
webView.load(QUrl(url))

webView.show()
sys.exit(app.exec_())

这样,你的浏览器就会在使用QWebEnginePage的过程中自动使用设置的代理进行请求了。可以根据自己的需求修改代理的IP和端口。