我希望使用此代码来抓取JavaScript驱动的页面,该代码出现在许多过去的线程上(cf this,this,以及非现场线程上的其他线程):< / p>
import sys
from PyQt5.QtCore import QEventLoop
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
def render(source_html):
class Render(QWebEngineView):
def __init__(self, html):
self.html = None
self.app = QApplication(sys.argv)
QWebEngineView.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.setHtml(html)
while self.html is None:
self.app.processEvents(QEventLoop.ExcludeUserInputEvents | QEventLoop.ExcludeSocketNotifiers | QEventLoop.WaitForMoreEvents)
self.app.quit()
def _callable(self, data):
self.html = data
def _loadFinished(self, result):
self.page().toHtml(self._callable)
return Render(source_html).html
它工作正常。
我的问题是我是否需要为代码的这一部分使用代理(假设我通常希望为所有网络活动使用代理)。
我使用urllib.request和代理来访问相关网站,然后将html从那里传递到PyQt5来执行JavaScript mambo。旅程的第二段是否涉及应该代理的网络连接?如果是这样,我应该如何更改此代码 - 直到今天才触及PyQt并且感觉有点过头了。
使用Python 3.5和Windows 7。
非常感谢。