目的:
本文要介紹的主題是 Headless Selenium , 什麼是 Headless ? 簡單說,這樣的 Selenium 就是沒有Render出網頁; 也就是GUI的部分。一切在背後運行。
對了,若您對於Selenium 仍不知道怎麼使用的朋友可以先參考下面文章。
Python自動化工具 – Selenium 機器人般的瀏覽器
Headless 這名字很有趣,就像無頭騎士一樣,雖然沒有頭,但卻一樣威力強大。這樣有什麼好處呢?
第一、因為沒有把網頁Render出來,意味著系統效能會更好,速度比較快。
第二、更重要的是,這樣的功能很適合運行在Command line的Linux上面。
甚至是網路上的Instance。
第三、可以一次模擬多重瀏覽器的一起瀏覽的情境。
第四、因為沒有GUI,意味著若與其他功能串接的時候, 可以不知不覺地完成讀取網頁狀態的功能。例如、打包成Windows上的Application,裡面藏有串接網頁狀態的程式功能。
是不是很方便呢?
Headless 是不是讓你想到了什麼…..
說明:
快來看看怎麼用吧? 其實非常簡單,用法與一般的Selenium無異,但在Option的部分,要下參數 (‘–headless’)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless') # 啟動Headless 無頭
chrome_options.add_argument('--disable-gpu') #關閉GPU 避免某些系統或是網頁出錯
url = 'https://google.com/'
executable_path = 'chromedriver.exe' #看你的Webdrive放哪邊就把路徑指過去
driver.get(url)
driver = webdriver.Chrome(executable_path=executable_path,chrome_options=chrome_options) #套用設定
你自己要撰寫的程式就接在這段底下,繼續開發。
driver.quit() # 把瀏覽器關閉
如何安裝在Linux – Ubuntu 上:
不陌生,直接把下面的套件都安裝一下吧
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb # Might show "errors", fixed by next line
sudo apt-get install -f
這裡做個測試,看看是否有正確成功運行,下面我們把GPU關掉,因為很多網路主機是沒有GPU的。
google-chrome --headless --remote-debugging-port=9223 https://chromium.org --disable-gpu
接下來,使用curl指令,看看網頁是否正確地被拉下來了。
curl http://localhost:9223
若最後網頁有回吐資料,那就代表接通了。可以繼續開發了。
結論:
Headless的應用很廣,例如把程式運行在網路主機上,透過Linux的 headless selenium,就可以搭配Linux最簡單的Crontab script,來達成定期檢查網頁的功能。例如,每周去看一下發燒影片、每天去抓取新聞標題…等等各種應用,真正可以做出完全不用守在電腦前的自動化。
只要去AWS 、hostgator、GCP 等開一個Instance,把自動化程式裝在上面,時間到就自動去爬。而這樣的情境,使用 headless selenium 加上Linux 是最好的組合之一。
參考: