我使用PyQt4的QtWebKit在内存中呈现一个网页,因为我需要在检索嵌入的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秒),但是它只适用于一个页面。这意味着在第一个网页上,我的最终输出如下:
^{pr2}$但在连续的尝试中,看起来是这样的:
<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>
我不知道这里发生了什么?在
看起来你的javascript解释器只在第一个页面启动;第二个页面被加载,但却永远无法运行它的javascript;但这与你真正的问题无关,那就是视频文件的名称隐藏在看起来像这样的代码块中
如果您调用一个javascript控制台并运行
^{pr2}$lxUTILsign.decode(googleCode);
,您将得到坏消息是lxUTILsign被彻底混淆了;好消息是,这无关紧要,因为它只是一个base64解码器,Python已经有了一个(包括电池,宝贝!)。在
退货
相关问题 更多 >
编程相关推荐