私は(Pythonの初心者として)PyQtを使用しています。ヘッドレスシステムでウェブサイトのスクリーンショットを撮れるようにする必要があります。以前に別のプロジェクトでPhantomJSを使用していましたが、1.5でFlashのサポートが終了したため、新しいプロジェクトで非推奨の1.4バージョンに依存したくありません。
だから私は自分で自分の仕事をするためにPyQtを使っています。指定されたURLでウェブサイトのスクリーンショットを撮ることができます。問題ありません。
しかし、フラッシュプレースホルダーに「青いサイコロ」のフラッシュプラグインアイコンが表示され続けます(はい、JavaScriptとプラグインがアクティブになっています)
self.settings.setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True)
self.settings.setAttribute(QtWebKit.QWebSettings.JavascriptEnabled,True)
私はYoutubeビデオページでいくつかのテストを行っています。これが私の問題の例です:
最初の部分に関連している可能性のある2番目の部分:スクリーンショットを撮る前に数秒待つようにPyQtに指示するにはどうすればよいですか?例でわかるように、右側の画像はjavascriptとdata属性を使用してロードされているため、まだアンロードされています。私のスクリプトでは、loadFinishedシグナル(onLoad()javascriptと同等)のスクリーンショットを撮ります。
私の最初の推測は単に
time.sleep(2)
キャプチャメソッドを呼び出す前ですが、機能していません。このスリープ時間中はWebkitの読み込みもスリープ状態であり、ページに何も読み込まれないと想定しています。
カスタム信号を作成しようとしましたが、それでもスリープせずにトリガーする方法がわかりません。
私の最後の推測は、アプリケーションをスレッド化する必要があるということです。私は正しいですか?
フラッシュコンテンツの表示やsetTimeoutのようなシグナルの追加に役立つヒント/スクリプトがあれば、本当にありがたいです。
よろしくお願いします。
編集: 私のソリューションを追加するための簡単な編集:
timeoutTimer = QTimer()
timeoutTimer.setInterval(3000) # wait for 3secs
timeoutTimer.setSingleShot(True)
timeoutTimer.timeout.connect(theMethodToCallOnTimeout)
フラッシュについて:OSXでフラッシュプレーヤーが壊れているようです(おそらく32/64ビットの問題に関連しています)。