I need help on taking a flash webvideo screenshot on Pyside or PyQt4
-
i have an issue on taking a screenshot of the youtube video page.
in Pyside i have enabled flash function using below command to play video on Pyside browser
@ s.setAttribute(QWebSettings.PluginsEnabled, True)
s.setAttribute(QWebSettings.JavascriptEnabled, True)@now my script can open video embedded website and playing videos but when i tried to capture screenshot it showing Black screen on video embedded place.
Script:
#!/usr/bin/env python
#-- coding:utf-8 --@from PySide.QtCore import Qt, QUrl, QTimer, Slot
from PySide.QtGui import QApplication, QImage, QPainter
from PySide.QtWebKit import QWebView, QWebPage, QWebSettings
from PySide.QtNetwork import QNetworkRequest, QNetworkReply
import time, sysclass Render(QWebView):
def init(self, url, filename, image_crop, translate_page, parent=None):
super(Render, self).init(parent)
self.image_crop = image_crop
self.fileName = time.strftime("%Y%m%d%H%M%S",time.localtime()) +"_test.jpg"
self.finished = False# Settings s = self.page().settings() s.setAttribute(QWebSettings.AutoLoadImages, True) s.setAttribute(QWebSettings.PluginsEnabled, True) s.setAttribute(QWebSettings.JavascriptEnabled, True) s.setAttribute(QWebSettings.JavaEnabled, False) s.setAttribute(QWebSettings.JavascriptCanOpenWindows, False) s.setAttribute(QWebSettings.DeveloperExtrasEnabled, True) #self.page().mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) self.page().mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) self.timerScreen = QTimer() self.timerScreen.setInterval(10000) self.timerScreen.setSingleShot(True) self.timerScreen.timeout.connect(self.takeScreenshot) self.loadFinished.connect(self.timerScreen.start) self.load(QUrl(url)) @Slot(QNetworkReply) def takeScreenshot(self): [x,y,width,height] = self.image_crop frame = self.page().mainFrame() size = frame.contentsSize() size.setWidth(1000) size.setHeight(2000) self.page().setViewportSize(size) image = QImage(self.page().viewportSize(), QImage.Format_ARGB32) painter = QPainter(image) frame.render(painter) painter.end() image1 = image.copy(x,y,width,height) image1.save(self.fileName) self.finished = True
def run(url, filename, image_crop, translate_page):
app=QApplication.instance()
if not app:
app = QApplication(sys.argv)
app.setApplicationName('myWindow')
r = Render(url, filename, image_crop, translate_page)
r.show()
while not r.finished:
app.processEvents()
time.sleep(0.01)
return r.filepathScreenshot_Name = run("http://www.youtube.com/watch?v=frrvOnEZO3k", 'www.youtube.com', [0,0,1000,1000], translate_page='NO')
print Screenshot_Name@ -
The qt library probably can't take screenshots of content in plugins.
You can try the workaround I describe in stackoverflow.com/a/13976054/1699750 of taking a screenshot using other tools like the imagemagic import command
-
Thanks for the quick response. is there any other methods to take screenshot with video from self.page().mainFrame() ?