python - 使用 PyQT 使用 headless webkit 实现时,HTML 页面大不相同

标签 python pyqt pyside

我的印象是,使用 PyQT 使用 webkit 的 headless 浏览器实现会自动为我获取每个 URL 的 html 代码,即使其中包含大量 JS 代码。但我只看到了一部分。我正在与我从 Firefox 窗口保存页面时得到的页面进行比较。

我正在使用以下代码 -

class JabbaWebkit(QWebPage):
    # 'html' is a class variable

    def __init__(self, url, wait, app, parent=None):
        super(JabbaWebkit, self).__init__(parent)
        JabbaWebkit.html = ''

        if wait:
            QTimer.singleShot(wait * SEC, app.quit)
        else:
            self.loadFinished.connect(app.quit)

        self.mainFrame().load(QUrl(url))

    def save(self):
        JabbaWebkit.html = self.mainFrame().toHtml()

    def userAgentForUrl(self, url):
        return USER_AGENT


    def get_page(url, wait=None):
        # here is the trick how to call it several times
        app = QApplication.instance() # checks if QApplication already exists

        if not app: # create QApplication if it doesnt exist
            app = QApplication(sys.argv)
        #
        form = JabbaWebkit(url, wait, app)
        app.aboutToQuit.connect(form.save)
        app.exec_()
        return JabbaWebkit.html

有人能看出代码有什么明显的错误吗?

通过几个 URL 运行代码后,我发现这里有一个非常清楚地显示了我遇到的问题 - http://www.chilis.com/EN/Pages/menu.aspx

感谢您的指点。

最佳答案

页面有ajax代码,加载完成后,还需要一些时间用ajax更新页面。但是您的代码将在加载完成后退出。

你应该添加一些这样的代码来等待一些时间并处理 webkit 中的事件:

for i in range(200): #wait 2 seconds
    app.processEvents()
    time.sleep(0.01)

关于python - 使用 PyQT 使用 headless webkit 实现时,HTML 页面大不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214939/

相关文章:

python - 如何在形状优美的Python中在具有多边形的多边形上打洞

python - 写入 SQL 数据库时发生 I/O 错误

Python:如何摆脱每个子列表的第二个元素?

python - 如何防止 QTableView 项在双击时被清除

python - PyQt4 中的多次拖放

python - 如何在 PyQt 中获取之前激活的小部件?

python - dict.get() - 默认 arg 即使在成功时也会被评估

python - PySide 中缺少 QtGui.QIdentityProxyModel?

python - 如果从后台线程调用私有(private)槽,为什么主事件循环会被卡住?