2

Xサーバーを使用してFirefoxをヘッドレス(Xvfb)X11で実行することにより、Webサムネイルを取得しようとしています。

Firefox がいつレンダリングを終了したかを知る方法を探しています。その後、イメージ プログラムを使用してウィンドウを取得できます。

問題: Firefox がいつレンダリングを終了するかを判断できません。私が知っているのは、レンダリングが完了すると、ステータスバーに「完了」という出力が表示されることだけです (IE、GUI の Firefox に表示されているように)。

Firefox がページのレンダリングを終了したかどうかを判断するために何を使用できるか、誰にもわかりますか?

私がしたことは、40 秒間スリープするだけですが、これは常に機能するとは限りません。

環境: Centos 5.7、Xvfb、Firefox 3.6.23

シェル コマンド:

Xvfb: 1 -screen 0 1024x768x24 &

export DISPLAY=localhost:1.0

DISPLAY=localhost:1.0 firefox http://www.example.com -width 1024 -height 768

sleep 40  **[ NEED some thing to tell me if Firefox finishes rendering ]**

DISPLAY=localhost:1.0 import -window root example.com.png

pkill firefox
4

2 に答える 2

1

私の頭の上から3つの方法。

  1. window.onload画像グラバーにフックして起動する独自の拡張機能を作成します。
  2. window.onloadフックしてアラートを発生させるグリースモンキー スクリプトを作成します。そのようなアラートを待ってから、イメージ グラバーを実行します。
  3. 定期的に [停止] ボタンの画像 (ウィンドウに対して既知の座標にある必要があります) を取得し、その色を分析します。無効になっている場合、レンダリングは終了しています。
于 2011-10-05T20:38:59.933 に答える
0

FF 4.xこれは以上で簡単に実行できるとは思わないことに注意してください。これは、これらのバージョンの「機能」によるものです。可能であれば、 Operaなどの別のブラウザーを使用することをお勧めします。私はまだ自分でテストしていませんが、FF で気づいたすべての欠陥はないと思います。下記参照。

あなたの場合、次の解決策が効率的かもしれません:

画面のどこかに絶対位置の長方形を追加する Greasemonkey スクリプトを作成します。

ページの読み込みが完了したら、この四角形を 3 サイクルで点滅させます: 赤、青、透明

そのようなサイクルが少なくとも 2 回完了するのを待つスクリプトを作成し (そのため、赤、青、何か、赤、青が表示されます)、透過フェーズで正しいタイミングでスクリーンショットを作成します。

これは、X11 や VNC などで実行できるはずです。申し訳ありませんが、ここで提示できるより良い解決策やコードがありません。

私としては、EasyRFB同様の問題を解決するために書いたものを使用して解決します。ただし、ドキュメント化されていない恐ろしいコードフラグメントを簡単に読んで理解できる非常に絶望的な天才である場合を除いて、まだお勧めできません;)


ところで、任意の Web ページのスクリーンショットを作成できるパッケージのアイデアに注目していただき、ありがとうございますEasyRFB。これまで自分で考えたことはありませんでした。

GitHub を見ていると、 Seleniumや WebKitに基づいて Web スクリーンショットを撮るためのソリューションいくつかあることに気付きました。これらはプロモーション ショットには確かに適していますが、ユーザーが Web ページをどのように見るかという一般的なユースケースをカバーすることはできないようです。

おそらく、Windows 95 IE 4、FF 1、またはキメラを備えた Debian Potato などで見られるように、任意のページからスクリーンショットを自動化できるようになると興味深いでしょう。これについて調べてみます ;)


私からのStackoverflowに関する別の投稿があることに注意してください。

(コア)、(小さな Web ヘルパー) 、(制御スクリプト)EasyRFBを組み合わせて書いたものがあります。でテストされましたが、任意の. どういうわけかあなたが望むことをすることができますが、それは開発コードであり、文書化されておらず、複雑で恐ろしく書かれており、欠陥がある可能性があることに注意してください. あなたはそこにそれを見つけることができます:PythonPHPAJAXbashXVncVNC

以下の目的で作成されました。

  • インターネット接続が非常に遅く、信頼性が非常に低い状況でも、モバイルからリモート GUI を制御できること
  • 完全な UI 自動化 / コマンドラインによるマウスの置き換え
  • 出力がピクセルカラーパーフェクトである必要がない場合に、ブラウザーまたは一部の Windows スパイプログラムが表示するものとは対照的に、ユーザーが表示するものに基づく自動 QA テスト

高速でも、効率的でも、使いやすく、他の人のためにも (まだ) 書かれていません。私にとっては、どういうわけかうまくいきます。

機能:

  • は Web 中心で、サーバーにAJAXWeb フロントエンドを提供します。VNC
  • 画面の内容を高度に圧縮された状態.jpgで更新します。
  • ロスレススクリーンショットを撮ることができます
  • 画面のコンテンツに対してテンプレートをあいまい一致させることができます
  • テンプレートは Web で編集できますがedit.html、このエディターは基本的なものであり、自明ではなく、文書化されていません。
  • これらのテンプレートが一致するのを待って、キープレス、マウス移動、クリックなどのコマンドを送信するシェル スクリプトを作成できます。VNC
  • これがどのように行われるかを理解するのに役立つスクリプトがいくつかありますが.sh、本当に役立つものをまだ公開できていません。申し訳ありません

何も文書化されておらず、使用方法を説明できません。あなたは自分自身を見つけるか、迷子になります。ごめん。見ないほうがいいですよ、傷つくかもしれません。


そして、これらすべてを実行中に FF で気付いた問題について説明します。

新しい FF バージョンでは、画面が正しく更新されません。私の側で正しく動作することがわかっている最後のバージョンはFF 3.6シリーズでしたが、後ですべてが奇妙な動作をすることがあります。

例えば:

  • 新しいバージョンでは、画面の内容を更新する前にステータスを更新するようになりました。
  • また、CPU とメモリの要求が非常に高いため、画面更新の最後のステップを完了するのに時間がかかる場合があります。遅いハードウェア (テストされていないNSLU2など) では、スピナーなどが既に「終了」状態になってから数分かかることさえあると思います。

そのため、「onload()」について通知する (!) ナイーブな Greasemonkey ソリューションを含む (!) 灰色になるスピナーを見ても、FF 4.x準備ができていることを検出したときに画面の一部がまだ更新されていない可能性があるため、上と下の両方で失敗します。

おそらくXVnc、私のスクリプトにバグがあり、これらすべてがトリガーされているのかもしれませんが、FF 3.xすべてが正しかったので、古いバージョンに戻すと、見られたすべての問題がすぐに解決されると思います。(しかし、これらすべての問題に対する回避策は既に用意されています。しかし、そのスクリプトを公開することはできません。申し訳ありません。)

ひどくなる。

FF 4.x以上は明らかにイベント処理を少し遅らせます。そのため、スクロールバーからマウスをジャンプさせると、強調表示されたままになることが多く、イベントがスクロールバーに到達しないと思います。

通常のデスクトップではマウスをジャンプしませんが、私のソリューションではジャンプできます。修正は、追加の余分なマウス移動イベントを生成して、FF が正しいことを行うようにすることです。

また、FF が原因なのか、FF で表示される Web ページが原因なのか、実際にはわからないことに気付きました。私はこれまでにこれを観察したことはありませんでしFF 3.xた。これを解決する秘訣は、ページをリロードすることです。画面の増分更新に関係している可能性がありますが、再試行 (リロード ボタンの自動クリック) が機能するため、まだ詳しくは説明しませんでした。

于 2011-10-27T20:22:07.340 に答える