Python 自動化工具 – Headless Selenium 隱藏的網頁瀏覽器

headless_selenium_featured_image

目的:

本文要介紹的主題是 Headless Selenium , 什麼是 Headless ? 簡單說,這樣的 Selenium 就是沒有Render出網頁; 也就是GUI的部分。一切在背後運行。

對了,若您對於Selenium 仍不知道怎麼使用的朋友可以先參考下面文章。

Python自動化工具 – Selenium 機器人般的瀏覽器

Headless 這名字很有趣,就像無頭騎士一樣,雖然沒有頭,但卻一樣威力強大。這樣有什麼好處呢?

第一、因為沒有把網頁Render出來,意味著系統效能會更好,速度比較快。

第二、更重要的是,這樣的功能很適合運行在Command line的Linux上面。

甚至是網路上的Instance。

第三、可以一次模擬多重瀏覽器的一起瀏覽的情境。

第四、因為沒有GUI,意味著若與其他功能串接的時候, 可以不知不覺地完成讀取網頁狀態的功能。例如、打包成Windows上的Application,裡面藏有串接網頁狀態的程式功能。

是不是很方便呢?

Headless 是不是讓你想到了什麼…..

headless selenium就像斷頭谷的無頭騎士一樣,威力強大
headless selenium就像斷頭谷的無頭騎士一樣,威力強大

說明:

快來看看怎麼用吧? 其實非常簡單,用法與一般的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 是最好的組合之一。

參考:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *