5

我的印象是,使用 PyQT 的 webkit 的无头浏览器实现会自动为我获取每个 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 运行代码后,我发现这是一个非常清楚地显示我遇到的问题的 URL - http://www.chilis.com/EN/Pages/menu.aspx

感谢您的任何指示。

4

1 回答 1

1

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

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

for i in range(200): #wait 2 seconds
    app.processEvents()
    time.sleep(0.01)
于 2014-04-19T03:32:23.950 回答