Python QWebView : Accessing Network Resources

标签 python pyqt webkit pyqt4 qwebview

我正在尝试使用QNetworkAccessManager访问网络请求网址

从此示例 Threading with webkit ,我已将 NetWorkAccessManager 附加到现有代码,但该页面根本不加载我的代码。

import sys
from collections import deque # threadsafe datatype
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from PyQt4.QtNetwork import *
NUM_THREADS = 2 # how many threads to use

class Render(QWebView):
    active = deque() # track how many threads are still active
    data = {} # store the data

    def __init__(self, urls):
        QWebView.__init__(self)

        # I have Added the following code
        manager = Manager()
        page = self.page()
        page.setNetworkAccessManager(manager)

        self.loadFinished.connect(self._loadFinished)
        self.urls = urls
        self.crawl()

    def crawl(self):
        try:
            url = self.urls.pop()
            print 'downloading', url
            Render.active.append(1)
            self.load(QUrl(url))
        except IndexError:
            # no more urls to process
            if not Render.active:
                # no more threads downloading
                print 'finished'
                self.close()

    def _loadFinished(self, result):
        # process the downloaded html
        frame = self.page().mainFrame()
        url = str(frame.url().toString())
        Render.data[url] = frame.toHtml()
        Render.active.popleft()
        self.crawl() # crawl next URL in the list

# I have Added the following class
class Manager(QNetworkAccessManager):
    def __init__(self):
        print 'entered network manager'
        QNetworkAccessManager.__init__(self)
        self.finished.connect(self._finished)

    def _finished(self, reply):
        print 'finished network req event'
        url = reply.url().toString()
        print url.toUtf8()

app = QApplication(sys.argv) # can only instantiate this once so must move outside class
urls = deque(['http://www.google.com/', 'http://stackoverflow.com/'])
renders = [Render(urls) for i in range(NUM_THREADS)]
app.exec_() # will execute qt loop until class calls close event

我在这里做错了什么?

最佳答案

只需在设置page.setNetworkAccessManager(manager)之前添加self.setPage(page)

关于Python QWebView : Accessing Network Resources,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35152118/

相关文章:

python - 垂直打印字符串 - Python3.2

python - 使用 ElementTree.parse 解析 XML 文件时出错

python - 使用 pandas 格式化不一致的日期数据

javascript - 背景图像放大使用-webkit?

python - 如何检查列表的元素是否是列表(在 Python 中)?

python - 为什么 itemAt() 并不总能找到 QGraphicsItem

python - QGraphicSscene背景

python - 数据源排序后如何更新QAbstractTableModel和QTableView?

javascript - Chrome "background: 0"document.styleSheets 中的 cssText 错误

html - 它是 WebKit 中的最小宽度错误吗?