PyQt5 WebEngine mehrere WebViews mit jeweils unterschiedlichen Proxys in einem Fenster funktioniert nur bei den ersten beiden Proxys?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Du kannnst für eine einzelne QWebPage einen bestimmten Proxy definieren, indem du ihr eine entsprechende QNetworkAccessManager-Instanz überreichst.

  1. QNetworkAccessManager-Instanz anlegen und Proxy setzen (setProxy)
  2. Instanz an QWebPage überreichen (setNetworkAccessManager)

Die aktuelle QWebPage-Instanz erhältst du über die page-Methode des QWebView.

Für QWebEngineView-Objekte funktioniert das allerdings nicht.

LukasZander 
Fragesteller
 08.09.2021, 07:03

Ok, das mein also, dass das mit QWebPage mit mehreren Fenstern jeweils unterschiedlicher proxys geht? Danke

0
regex9  08.09.2021, 07:36
@LukasZander

Jedes QWebView besitzt eine eigene QWebPage. Jede QWebPage benutzt einen eigenen Proxy.

0
LukasZander 
Fragesteller
 08.09.2021, 07:46
@regex9

Ok, und warum kann ich dann nicht einfach mehrer WebViwes erstellen, und davor einen neuen ApplicationProxy setzen? Weist du wie ich jeder webview direkt eine Proxy zuweisen kann, denn bei mir wird ab dem 2. ApplicationProxy kein neuer mehr verwendet?

0
regex9  08.09.2021, 08:40
@LukasZander

Entweder du setzt einen Proxy, der für die gesamte Anwendung gilt (setApplicationProxy) oder du teilst jeder QWebPage einen individuellen Proxy zu. Andere direkt unterstützte Möglichkeiten kenne ich nicht.

0
LukasZander 
Fragesteller
 08.09.2021, 10:02
@regex9

Und wie Teile ich jeder QWebPage einen individuellen Proxy zu?

0
LukasZander 
Fragesteller
 08.09.2021, 10:47
@regex9

Ich habe das gerade mal getestet, es funktioniert aber nicht, denn es nutzt den Dedault-Proxy:

self.browser = PyQt5.QtWebEngineWidgets.QWebEngineView()
proxy_obj = PyQt5.QtNetwork.QNetworkProxy(PyQt5.QtNetwork.QNetworkProxy.ProxyType.Socks5Proxy, proxy[0],
                                          proxy[1])
PyQt5.QtNetwork.QNetworkAccessManager().setProxy(proxy_obj)
0
regex9  08.09.2021, 10:52
@LukasZander

Du hast irgendwie meine Antwort nicht richtig gelesen, oder? Weil du arbeitest weiter mit einem QWebEngineView und den zweiten Schritt sehe ich auch nicht in deinem Code.

0
LukasZander 
Fragesteller
 08.09.2021, 11:03
@regex9

Bei mir gibt es aber kein QWebPage, höchstens kann ich QWebEnginePage importieren, die hat aber keine Methode setNetworkAccessManager

0
LukasZander 
Fragesteller
 08.09.2021, 11:05
@LukasZander

vllt kurz dc, stehe ganz schön auf dem Schlauch sry (CoolBlockZock#2993)

0
regex9  08.09.2021, 11:44
@LukasZander

Ok, ich sehe, ich bin auf einem veralteten Stand. Die QWebView-Komponente wurde mit Version 5.6 entfernt. Das heißt, direkt vom Framework besteht keine Möglichkeit, individuelle Proxies zu setzen.

Qt WebEngine does not feature an API for setting proxies directly. Anyhow, it can
1.) Use the system proxy settings
2.) Use any proxy set explicitly in Qt Network

Quelle

0
LukasZander 
Fragesteller
 08.09.2021, 11:45
@regex9

ok, danke, ich versuche mal, ne alter version zu verwenden

0
regex9  08.09.2021, 11:50
@LukasZander

Du findest die beiden relevanten Module dann in PyQt5.QtWebKitWidgets.

Ungefährer Code:

webview = QWebView()
networkAccessManager = NetworkAccessManager()
networkAcessManager.setProxy(""" proxy ... """)
webview.page().setNetworkAccessManager(networkAccessManager)
0
regex9  09.09.2021, 08:30
@LukasZander

Laut meinem letzten Projekt mit QWebView habe ich dort die Version 5.12 genutzt.

0
LukasZander 
Fragesteller
 09.09.2021, 08:31
@regex9

Ok ja mit Python 37 geht das noch trotzdem danke

0