oba*_*han 6 python python-3.x qt5 pyqt5 qwebengineview
我遵循了这个解决方案并且一开始工作得很好。
但是在我更改一次或QWebEngineView不关心它后,我无法再次更改代理。
原始代码包含的不止这些,所以我将它纯化为一个工作示例来演示我的问题
假设我们的ip是“xxxx”,proxy1的ip是“yyyy”,proxy2的ip是“zzzz”
当您运行示例代码时,您必须看到
但我得到了
那么,任何想法如何解决这个问题?
示例运行代码:(只需更改测试功能中的代理信息。您可以从这里尝试任何工作代理: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)