我正在使用PyQt(作为Python初学者)。 我需要能够在一个无头系统的网站截图。 我之前在另一个项目中使用了PhantomJS,但是他们在1.5中放弃了Flash支持,我不想在我的新项目中依赖一个不推荐的1.4版本。
所以我用PyQt自己做我的事情。 我可以用给定的网址截图,没问题。
但我一直在flash占位符上显示“blue dice”flash插件图标(是的,javascript和插件被激活)
self.settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True)
self.settings.setAttribute(QtWebKit.QWebSettings.JavascriptEnabled,True)
我正在Youtube视频页面上做一些测试,下面是我的问题示例:
第二部分,可能与第一部分有关: 我怎么能让PyQt在截图前等几秒钟? 正如您在示例中看到的,右侧的图像仍然是卸载的,因为它们是使用javascript和data属性加载的,在我的脚本中,我在loadFinishedsignal(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位问题有关)。
我建议使用selenium。它是为进行网络自动化、屏幕截图和测试而设计的。因为它使用firefox,所以很容易获得完整的flash支持。它也可以在无头模式下运行。下面的代码可以像youtube视频一样用flash截取网页截图。你可以看到下面的截图。有几件事要记住。selenium有一个save_屏幕截图方法,您可以看到它在代码中被注释掉了。我没有使用它是因为它没有对flash组件进行正确的屏幕截图,您可以使用Taking screenshot of flash object using Selenium with Webdriver中的技术来纠正这个问题。不过,我选择了使用imagemagic导入命令拍摄屏幕截图。这是一个屏幕截图工具,在Linux中工作。您可以查看Take a screenshot via a python script. [Linux]和Get screenshot on Windows with Python?以了解其他截图方法。
代码
屏幕截图
如果您要冻结整个应用程序,则可以使用
QTimer
、QEventLoop
、QThread
等相关问题 更多 >
编程相关推荐