前言:
最近在做webUI的自動化,當本地執行腳本時,會啟動瀏覽器的UI界面,導致其他工作無法進行。並且當電腦鎖屏時,chromer driver 會退出,無法繼續執行。查網上的資料,headerless Browser模式可以在后台運行瀏覽器。
1、Headerless Browser是什么鬼?
Headerless Browser(無頭的瀏覽器)是瀏覽器的無界面狀態,可以在不打開瀏覽器GUI的情況下,使用瀏覽器支持的性能。
Chrome Headless相比於其他的瀏覽器,可以更便捷的運行web自動化,編寫爬蟲、截圖等。通常是由編程或者命令行來控制的。
好處:
可以加快UI自動化測試的執行時間,對於UI自動化測試,少了真實瀏覽器加載css,js以及渲染頁面的工作。無頭測試要比真實瀏覽器快的多。
可以在無界面的服務器或CI上運行測試,減少了外界的干擾,使自動化測試更穩定。
2、命令行模式運行
我本地的環境:
- 系統:mac
- chrome瀏覽器版本:
命令行啟動chrome:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --remote-debugging-port=9222 https://www.baidu.com
參數說明:
- --headless:無頭模式,就是無界面模式運行
- --remote-debugging-port:開啟遠程調試,端口9222和我們之前轉發出來的端口一致
- --user-data-dir:設置獨立的文件保存目錄,建議一個網站一個目錄
- --crash-dumps-dir:設置的crash文件保存目錄
如果沒有指定crash-dumps-dir可能會報錯。
ERROR:xattr.cc(64)] setxattr org.chromium.crashpad.database.initialized on file /var/folders/gx/1m0t1z_d03dg4pjhv7bwwt_c0000gp/T/: Operation not permitted (1)
加上crash-dumps-dir參數,命令如下:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --headless --crash-dumps-dir=/Users/work/baidu http://www.baidu.com/
驗證是否成功開啟headless chrome 的服務:
隨意打開一個瀏覽器窗口,輸入http://localhost:9222,如果看到如下效果,就說明成功開啟。
3、連接遠程端口
如果是本機調試,直接打開:http://localhost:9222/json,效果如下圖所示:
打開http://localhost:9222/json可以看到有一個devtoolsFrontendUrl,那就是開發者工具的前端地址,就是一個html應用,url里面傳過去WebSocket調試地址。打開這個地址就可以看到熟悉的開發者工具了!注意:這個窗口調試的是遠程chrome上的頁面。
其他的一些已知接口:
- http://127.0.0.1:9222/json :查看已經打開的Tab列表
- http://127.0.0.1:9222/json/version : 查看瀏覽器版本信息
- http://127.0.0.1:9222/json/new?http://www.baidu.com : 新開Tab打開指定地址
4、截圖
截圖命令:--screenshot命令
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --crash-dumps-dir=/Users/work/baidu --screenshot http://www.baidu.com/
使用--screenshot命令會在當前工作目錄中保存截圖為screenshot.png