使用PyQT使用无头webkit实现时,HTML页面大不相同

use*_*201 5 python pyqt pyside

我的印象是使用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
Run Code Online (Sandbox Code Playgroud)

有人可以看到代码明显错误吗?

通过几个URL运行代码之后,我发现这里显示的问题非常明显 - http://www.chilis.com/EN/Pages/menu.aspx

谢谢你的任何指示.

小智 1

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

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

for i in range(200): #wait 2 seconds
    app.processEvents()
    time.sleep(0.01)
Run Code Online (Sandbox Code Playgroud)