PyQt4 の QtWebKit を使用して Web ページをメモリにレンダリングしています。これは、埋め込まれた Flash ビデオ要素を取得する必要があるときに JavaScript を実行する必要があるためです。現在、私が使用しているコードは次のようになります。
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import QWebSettings, QWebPage
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
# Settings
s = self.settings()
s.setAttribute(QWebSettings.AutoLoadImages, False)
s.setAttribute(QWebSettings.JavascriptCanOpenWindows, False)
s.setAttribute(QWebSettings.PluginsEnabled, True)
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 get_page_source(url):
r = Render(url)
html = r.frame.toHtml()
return html
これで問題なく動作しますが、初期化には非常に時間がかかります (開始に 5 ~ 30 秒かかります) が、単一のページでのみ問題なく動作します。つまり、最初の Web ページでは、最終的な出力は次のようになります。
<div>
<embed type="application/x-shockwave-flash" src="/player.swf" width="560" height="440" style="undefined" id="mediaplayer" name="mediaplayer" quality="high" allowfullscreen="true" wmode="opaque" flashvars="width=560&height=440&autostart=true&fullscreen=true&file=FILELINK"></embed>
</div>
しかし、連続して試行すると、次のようになります。
<div>
<font>
<u>
<b>
<a href="http://get.adobe.com/flashplayer/">ATTENTION:<br>This video will not play. You currently do not have Adobe Flash installed on this computer. Please click here to download it (it's free!)
</a>
</b>
</u>
</font>
</div>
私が気付いていないここで何が起こっているのですか?