我正在使用 PyQt(作为 Python 初学者)。我需要能够在无头系统上截取网站的屏幕截图。我之前在另一个项目中使用 PhantomJS,但他们在 1.5 中放弃了 Flash 支持,我不想在我的新项目中依赖已弃用的 1.4 版本。
所以我使用 PyQt 自己做我的事情。我可以截取具有给定网址的网站的屏幕截图,没问题。
但我一直在 Flash 占位符上显示“蓝色骰子”Flash 插件图标(是的,javascript 和插件已激活)
self.settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True)
self.settings.setAttribute(QtWebKit.QWebSettings.JavascriptEnabled,True)
我正在 Youtube 视频页面上进行一些测试,这是我的问题的一个示例:
第二部分,可能与第一部分有关:如何告诉 PyQt 在截屏前等待几秒钟?正如您在示例中看到的,右侧的图像仍然未加载,因为它们是使用 javascript 和 data 属性加载的,在我的脚本中,我截取了loadFinished信号(onLoad() javascript 等效项))。
我的第一个猜测是
time.sleep(2)
在调用我的捕获方法之前,它不起作用。我假设 Webkit 加载在此睡眠时间内也处于睡眠状态,从而防止页面上加载任何内容。
我试图创建一个自定义信号,但是我仍然不知道如何在不睡觉的情况下触发它。
我最后的猜测是我需要线程化我的应用程序。我对吗?
如果您有任何提示/脚本来帮助我显示 Flash 内容和/或添加类似 setTimeout 的信号,我将不胜感激!
提前感谢您的帮助。
编辑: 只需快速编辑即可添加我的解决方案:
timeoutTimer = QTimer()
timeoutTimer.setInterval(3000) # wait for 3secs
timeoutTimer.setSingleShot(True)
timeoutTimer.timeout.connect(theMethodToCallOnTimeout)
关于 flash 的事情:看起来 flash 播放器在 OSX 上坏了(可能与 32/64 位问题有关)。