Bash

Bash:如何檢查網站是否已完成載入?

  • January 14, 2021

問題

我正在嘗試使用xdotool.

首先,我在瀏覽器中打開一個新選項卡:

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

然後(在頁面www.domain.tld完成載入後)我想執行一項任務:

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

如何檢測頁面是否已在 bash 中完成載入?

解決方法

目前我使用sleep 5(等待 5 秒直到呼叫下一個命令)這有點 hacky,因為有些頁面載入速度非常快,而其他頁面則沒有。

您可以使用流量監控服務,例如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執行
  • 監視一個過程:如果網路瀏覽器有其他選項卡不斷載入數據,它會失敗。(例如來自網站的音樂)
  • 需要幾秒鐘才能正確查看流量

或者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


結論:所有方法都基於網路流量監控,這意味著它們都需要幾秒鐘來分析所述流量,並且在確保載入大網站時可能會有所幫助,但在小網站的情況下不會加快整個過程網站。

引用自:https://unix.stackexchange.com/questions/628985