【问题标题】:Using PyQt4 to return Javascript generated HTML使用 PyQt4 返回 Javascript 生成的 HTML
【发布时间】:2014-08-23 15:02:51
【问题描述】:

我正在使用以下样板 PyQt4 代码,目的是捕获页面上由 javascript 生成的所有 HTML:

import sys  
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 

  class Render(QWebPage):  
    def __init__(self, url):  
        self.app = QApplication(sys.argv)  
        QWebPage.__init__(self)  

        self.loadFinished.connect(self._loadFinished)  
        self.mainFrame().load(QUrl(url))  
        self.app.exec_()  

    def _loadFinished(self, result):

        self.frame = self.mainFrame()  
        self.app.quit()

def getHtml(str_url):
    r_html = Render(str_url)  
    html = r_html.frame.toHtml()

    return html

然后我创建了一个测试页面来看看它是否有效:

<html>

<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

    <script type="text/javascript">

    $(document).ready(function() {

        $('#test').text('This is a test!')
    });
    </script>
</head>

<body>

    <div id="test"></div>

</body>

</html>

这么跑

getHtml('http://www.mytestpage.com')

我希望看到带有“这是一个测试!”的 HTML在 div 中呈现的文本。然而,HTML 正在返回,而该片段不存在。

我做错了什么?代码没有等待页面完全加载吗?还是我误解了用例?

【问题讨论】:

    标签: python web-scraping pyqt4


    【解决方案1】:

    您忘记了http: 中的&lt;script src = ...&gt; 链接。 (= = 以及为什么你不先检查它)应该是;

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    

    如果你想在 PyQt4 上放网页,我建议使用QtWebKit.QWebView 显示网页。

    小例子;

    import sys
    from PyQt4 import QtGui, QtCore, QtWebKit
    
    class QCustomWebView (QtWebKit.QWebView):
        def __init__ (self, parent = None):
            super(QCustomWebView, self).__init__(parent)
            # self.load(QtCore.QUrl('https://www.google.jp')) # Test web link
            self.load(QtCore.QUrl('hello.html')) # Test html file
            self.settings().setAttribute(QtWebKit.QWebSettings.JavascriptEnabled, True)
    
    myQApplication = QtGui.QApplication([])
    myQCustomWebView = QCustomWebView()
    myQCustomWebView.show()
    sys.exit(myQApplication.exec_())
    

    注意:hello.html 是您的 html 文件。

    【讨论】:

    【解决方案2】:

    问题是我的系统上没有正确安装 PyQt4。重新安装解决了这个问题。 叹息

    【讨论】:

    • 嗯...我的系统上有 PyQt4。但我无法运行你的 html 代码。
    • 为什么不呢?你有错误吗?如果您只是复制到 html 并尝试在本地加载它,它将无法正常工作,因为 jquery 无法正确加载。需要通过网络服务器加载才能工作。
    • 我的意思是你的 html 文件不起作用。正如我的回答所说,你忘记了'http:'。我按文件而不是链接地址运行。如果我在链接 jquery 中添加“http:”,它的运行工作;否则无法运行。 (但是,我不知道为什么我不能使用 '\\' 速记)
    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多