Bash
Bash:如何檢查網站是否已完成載入?
問題
我正在嘗試使用
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
結論:所有方法都基於網路流量監控,這意味著它們都需要幾秒鐘來分析所述流量,並且在確保載入大網站時可能會有所幫助,但在小網站的情況下不會加快整個過程網站。