最近工作上碰到優化一個自動化機器人的項目,是用 Puppeteer 實作的,因為之前沒碰過 Node.js,所以剛好研究了一下。
簡單介紹一下 Puppeteer
Puppeteer 是 Node.js 的一個函式庫,可用來操控瀏覽器,是一個蠻新的工具,查了一下似乎是 Google 的專案 ( 難怪會開啟 Chromium ),那操控瀏覽器可以幹嘛呢? 可以應用的範圍包括:前端的自動化測試、爬蟲、表單提交 ( 如登入時輸入帳號密碼再按下送出 ) 等。
Selenium vs Puppeteer
之前有使用過 Python 搭配 Selenium 的經驗,我認為如果是做爬蟲、自動化操作的部分用 Puppeteer 非常方便,安裝還蠻簡單快速,API 也容易使用。但因為他只有支援 Chromium,再做前端畫面的自動化測試,我想就不太適合。以下是我用我的使用體驗做的比較表,提供參考:
Puppeteer | Selenium | |
---|---|---|
支援瀏覽器 | Chromium | 多種瀏覽器 |
支援語言 | Node.js | 多種語言皆適用 |
安裝 | 方便快速 | 稍微麻煩 |
使用 | 易上手 | 想較難上手 |
開始來安裝吧!
由於 Puppeteer 是用 Node.js 寫的,所以必須要先安裝 Node。
- 可以至官網 下載
- 如果用 mac 可以使用
https://nodejs.org/en/
安裝完後可以在 terminal 輸入 node -v
檢查是否有安裝成功
接著到要開發的專案,輸入 npm init -y
初始化專案,接著 npm i puppeteer
,安裝的時候會發現它會連同 Chromium 一同安裝。
安裝成功後,我們就可以來試寫看看囉。
第一隻機器人
新增一個檔案 main.js
,並複製以下程式碼:
const puppeteer = require('puppeteer');
(async () => {
// 開啟 browser
const browser = await puppeteer.launch({
headless: false
});
// 新增分頁
const page = await browser.newPage();
// 到部落格
await page.goto(`https://b123105.blogspot.com/`);
// 等待訂閱按鈕出現
await page.waitForSelector("button[class='subscribe-button pill-button']");
// 點擊訂閱按鈕
await page.click("button[class='subscribe-button pill-button']");
})();
接著到 terminal 輸入 node main.js
接下看看會發生什麼事吧!
( 偷偷置入自己的部落格 )
總結
這邊先賣個關子,下一篇會來解釋一下這段程式碼,接下來會實作一隻機器人,再請多多支持,謝謝!