PyQt5 - 在 QWebEngineView 初始化后不能多次更改代理

oba*_*han 6 python python-3.x qt5 pyqt5 qwebengineview

我遵循了这个解决方案并且一开始工作得很好。

将 QWebEngine 连接到代理

但是在我更改一次或QWebEngineView不关心它后,我无法再次更改代理。

原始代码包含的不止这些,所以我将它纯化为一个工作示例来演示我的问题

假设我们的ip是“xxxx”proxy1的ip是“yyyy”proxy2的ip是“zzzz”

当您运行示例代码时,您必须看到

  1. xxx
  2. yyyy
  3. 呜呜呜

但我得到了

  1. xxx
  2. yyyy
  3. yyyy

那么,任何想法如何解决这个问题?

示例运行代码:(只需更改测试功能中的代理信息。您可以从这里尝试任何工作代理:http : //free-proxy.cz/en/)。

""" NODOC """
__author__ = 'ozgur'
__creation_date__ = '7.10.2020 14:04'

import sys
import time

from PyQt5 import QtNetwork
from PyQt5.QtCore import QMetaObject, QTimer, QUrl
from PyQt5.QtTest import QTest
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout


class RosaRafined(QMainWindow):

    # noinspection PyUnusedLocal
    def __init__(self, qapp: QApplication):
        super(self.__class__, self).__init__()
        self.qapp = qapp
        self._setup_ui()
        self.counter = 0

    def _setup_ui(self):
        self.setObjectName("Form")
        self.resize(1024, 768)
        self.verticalLayout = QVBoxLayout(self)
        self.verticalLayout.setObjectName("verticalLayout")
        self.webengine = QWebEngineView(self)
        self.webengine.setObjectName("webengine")
        self.webengine.resize(1024, 768)
        # self.webengine.page().profile().setPersistentStoragePath(self.temppath)
        # self.webengine.page().profile().setCachePath(self.temppath)
        self.verticalLayout.addWidget(self.webengine)

        QMetaObject.connectSlotsByName(self)
        QTimer().singleShot(1000, self.test)

    @staticmethod
    def _change_proxy(ip, port, user, passwd):
        proxy = QtNetwork.QNetworkProxy()
        proxy.setType(QtNetwork.QNetworkProxy.HttpProxy)
        proxy.setHostName(ip)
        proxy.setPort(port)
        proxy.setUser(user)
        proxy.setPassword(passwd)
        QtNetwork.QNetworkProxy.setApplicationProxy(proxy)

    def test(self):
        
        testurl = QUrl("https://whatismyipaddress.com")
        if self.counter == 0:
            print("Will show your real ip, visiting url")
            self.webengine.setUrl(testurl)
            # your ip x.x.x.x shown, normally

        elif self.counter == 1:
            self._change_proxy("y.y.y.y", 80, "user", "pass")
            QTest.qWait(2)
            print("Will show your proxy1 ip")
            self.webengine.setUrl(testurl)
            # your ip y.y.y.y shown, normally

        elif self.counter == 2:
            self._change_proxy("x.x.x.x", 80, "user", "pass")
            QTest.qWait(2)
            print("Will show your proxy2 ip, unfortunately not...")
            self.webengine.setUrl(testurl)

            # still seeing y.y.y.y , it is not normal
        else:
            self.qapp.quit()

        self.counter += 1
        QTimer().singleShot(5000, self.test)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    form = RosaRafined(app)
    form.show()
    app.exec_()
    sys.exit()
Run Code Online (Sandbox Code Playgroud)