如何在 PyQt4 中通过代理发出请求? - 我看到了答案但不确定将代码放在哪里
How to make request through proxy in PyQt4? - I saw the answer but not sure where to put the code
我基本上是在尝试使用 PyQt 废弃一个站点以便能够加载 Javascript 并且我正在尝试通过 PyQt4 中的代理执行请求。我看到它适用于提出这个已回答问题的人:How to make request through proxy in PyQt4 但我无法让它工作,我不确定在哪里添加答案中建议的信息:
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
知道如何使这段代码完整吗?
我试过类似的东西:
import sys
import socket
import requests
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
from PyQt4.QtNetwork import *
from bs4 import BeautifulSoup
class MyNetworkAccessManager(QNetworkAccessManager):
def __init__(self):
QNetworkAccessManager.__init__(self)
proxy = QNetworkProxy('HTTP','179.179.253.147', '8080')
self.setProxy(proxy)
class MySettings(QWebPage):
def __init__(self):
QWebPage.__init__(self)
self.settings().setAttribute(QWebSettings.AutoLoadImages, False)
class Browser(QWebView):
def __init__(self):
QWebView.__init__(self)
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
self.setPage(MySettings())
self.loadProgress.connect(self._progress)
self.loadFinished.connect(self._loadFinished)
self.doc = self.page().currentFrame()
def _progress(self, progress):
print progress
def _loadFinished(self):
soup = BeautifulSoup(unicode(self.doc.toHtml()), 'lxml')
print soup.prettify().encode('utf-8')
if __name__ == "__main__":
app = QApplication(sys.argv)
br = Browser()
url = QUrl('https://www.example.com')
br.load(url)
br.show()
app.exec_()
但是 returns 是一个错误说:
"__init__()
takes exactly 1 argument (2 given)" on the line
new_manager = MyNetworkAccessManager(old_manager)
你不应该把老经理当作论据,你必须改变:
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
到
new_manager = MyNetworkAccessManager()
self.page().setNetworkAccessManager(new_manager)
同时更改:
proxy = QNetworkProxy('HTTP','179.179.253.147', '8080')
至:
proxy = QNetworkProxy(QNetworkProxy.HttpProxy, QString("179.179.253.147"), 8080)
我基本上是在尝试使用 PyQt 废弃一个站点以便能够加载 Javascript 并且我正在尝试通过 PyQt4 中的代理执行请求。我看到它适用于提出这个已回答问题的人:How to make request through proxy in PyQt4 但我无法让它工作,我不确定在哪里添加答案中建议的信息:
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
知道如何使这段代码完整吗?
我试过类似的东西:
import sys
import socket
import requests
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
from PyQt4.QtNetwork import *
from bs4 import BeautifulSoup
class MyNetworkAccessManager(QNetworkAccessManager):
def __init__(self):
QNetworkAccessManager.__init__(self)
proxy = QNetworkProxy('HTTP','179.179.253.147', '8080')
self.setProxy(proxy)
class MySettings(QWebPage):
def __init__(self):
QWebPage.__init__(self)
self.settings().setAttribute(QWebSettings.AutoLoadImages, False)
class Browser(QWebView):
def __init__(self):
QWebView.__init__(self)
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
self.setPage(MySettings())
self.loadProgress.connect(self._progress)
self.loadFinished.connect(self._loadFinished)
self.doc = self.page().currentFrame()
def _progress(self, progress):
print progress
def _loadFinished(self):
soup = BeautifulSoup(unicode(self.doc.toHtml()), 'lxml')
print soup.prettify().encode('utf-8')
if __name__ == "__main__":
app = QApplication(sys.argv)
br = Browser()
url = QUrl('https://www.example.com')
br.load(url)
br.show()
app.exec_()
但是 returns 是一个错误说:
"
__init__()
takes exactly 1 argument (2 given)" on the line new_manager = MyNetworkAccessManager(old_manager)
你不应该把老经理当作论据,你必须改变:
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
到
new_manager = MyNetworkAccessManager()
self.page().setNetworkAccessManager(new_manager)
同时更改:
proxy = QNetworkProxy('HTTP','179.179.253.147', '8080')
至:
proxy = QNetworkProxy(QNetworkProxy.HttpProxy, QString("179.179.253.147"), 8080)