Bash:ウェブサイトの読み込みが完了したことをどうやって確認できますか?

Bash:ウェブサイトの読み込みが完了したことをどうやって確認できますか?

質問

Firefoxブラウザを使用してタスクを自動化しようとしていますxdotool

まず、ブラウザで新しいタブを開きます。

firefox -new-tab "www.domain.tld"

その後(ページ以降www.domain.tld読み込み完了) 操作を行いたいです。

if [ <page has fully loaded> ]
then
    <commands>
fi

ページの読み込みが完了したかどうかbashでどのように検出しますか?

解決策

現在、私はsleep 5いくつかのページが非常に速くロードされ、他のページはあまりロードされないので、少し古いです(次のコマンドが呼び出されるまで5秒待ちます)。

ベストアンサー1

たとえば、トラフィック監視サービスを使用できますiftop。このツールは、ホスト名(または必要に応じてIP)に基づいて接続を表示します。

 #!/bin/bash
 while ( iftop -t -s 5 2>/dev/null | grep www.domain.ltd >/dev/null ) ; do
   echo "still loading"
 done

限界:

  • 走らなければrootならない
  • 正しいホスト名解決を想定します(たとえば、YouTubeでは失敗し、さまざまなホスト名を使用しますが、YouTubeは使用しません)。
  • ホスト名の確認時にIPv6のサポートがわからない
  • トラフィックを正しく確認するのに数秒かかります。
  • 特定の要素を継続的にリロードするウェブサイトはどうですか?

あるいは、nethogsプロセスごとの分析が実行され、送信と受信の両方が表示されます。たとえば、数が2の場合、2秒を遅らせます。

 #!/bin/bash
 while ( nethogs -t -c 2 -d 2 2>/dev/null | grep firefox >/dev/null ) ; do
   echo "still loading"
 done

限界:

  • 走らなければrootならない
  • 監視プロセス:Webブラウザに継続的にデータを読み込む他のタブがある場合、Webブラウザは機能しません。 (例:ウェブサイトの音楽)
  • トラフィックを正しく確認するのに数秒かかります。

または、tcpdumpこれは着信TCPパケットに制限され、次によって決定されます。timeout

while ( timeout  3 tcpdump 'tcp' -Q in -q 2>/dev/null |
        grep www.domain.ltd >/dev/null) ; do
  echo "still loading"
done

制限事項:参照iftop


結論:すべての方法はネットワークトラフィックの監視に基づいています。つまり、トラフィックを分析するのに数秒かかり、大規模なウェブサイトの読み込みを保証するのに役立つ可能性がありますが、小規模なウェブサイトの場合、全体的なプロセス速度は向上しません。プロセスウェブサイト。

おすすめ記事