本文鏈接:https://www.cnblogs.com/hchengmx/p/11006263.html
1. phantomjs介紹
在介紹puppeteer之前必須介紹一下phantomjs,phantomjs是一個可以用JavaScript編程的無頭瀏覽器,它在后端使用了QtWebKit。
但是根據 https://github.com/ariya/phantomjs/issues/15344
由於缺乏有效的貢獻,我將要把這個項目存檔。
要是將來的某一天,要是我們想要重新開發spantomjs,我們會重新運行它。
PhantomJS版本2.1.1將會是最后一個已知的穩定版本。
2. puppeteer是什么
puppeteer是一個Node庫,是由Google官方開發的,它使用了 DevTools協議,提供了強大的api來控制 headless 的chrome或者Chromium。它也可以設置為控制完整的(非headless模式)的chrome或者Chromium。
3. puppeteer可以做什么
- 為每個頁面生成截圖和PDF;
- 抓取網頁內容,也就是我們所說的爬蟲;
- 自動化表單的提交,UI測試,鍵盤輸入等;
- 創建最新的自動化測試環境。使用最新的JavaScript和瀏覽器功能直接在最新版本的Chrome中運行測試;
- 為你的網站創建一個 timeline trace,協助你診斷性能問題;
- 測試Chrome的Extensions;
4. puppeteer和puppeteer-core
自1.7.0版本以來,Chrome官方都會發布一個 puppeteer-core 包,於 puppeteer的主要區別是,這個包默認不會下載 Chromium,更多區別可見 這里。
5. puppeteer組織架構
根據puppeteer官方的說明,目前puppeteer的組織架構如下。
- puppeteer 通過 DevTools協議 與瀏覽器進行通信。
- Browser 實例可以有多個BrowserContext。
- BrowserContext 定義了一個瀏覽器session,她可以擁有多個頁面。
- Page 至少擁有一個frame:main frame。。還可以有iframe或者frame創建的其他frames。
- Frame 至少有一個 execution context(執行上下文)
- Worker 擁有一個單獨的 execution context(執行上下文),與 WebWorkers 通信。
參考資料: