安裝
必要條件:Node版本至少 v7.6.0,因為要使用 async / await。
國外網絡,執行npm install puppeteer --save
國內網絡,執行npm install puppeteer --registry https://registry.npm.taobao.org --ignore-scripts --save
因為安裝過程中會執行install.js
,install.js
會下載Chromium。我們加參數ignore-scripts
忽略install.js
執行。
然后自己手動去找國內的Chromium
鏡像。
推薦這個地址:http://xiazai.zol.com.cn/detail/43/429586.shtml
主要API
指定Chromium啟動的地址
不僅Chromium,Chrome也可以。
const puppeteer = require('puppeteer'); const browser = await puppeteer.launch({ executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', });
指定啟動瀏覽器的用戶文件數據
主要用來保存你的cookie數據,減少重復登錄。
```javascript
const puppeteer = require('puppeteer'); const browser = await puppeteer.launch({ userDataDir:'/Users/XXX/Library/Application Support/Google/Chrome/Profile 17/' });
指定瀏覽器的代理地址
const browser = await puppeteer.launch({ args: [ '--proxy-server=127.0.0.1:9876' ] }
打開瀏覽器窗口讓所有操作可見
headless默認是true。
browser = await puppeteer.launch({ headless: false, slowMo: 20 });
導航到某個頁面
browser = await puppeteer.launch({ headless: false, slowMo: 20 }); page = await browser.newPage(); await page.goto('https://g.cn');
等待CSS選擇器有結果
await page.waitForSelector('#loginForm');
等待自定義JavaScript函數返回true
await page.waitFor(() => !document.querySelector('.test'));
字符輸入
await page.type('#input', 'zifu');
Click
await page.click('#btn');
在瀏覽器中執行一段 JavaScript 代碼
page.evaluate(() => alert('test'));
獲取DOM節點屬性
$eval相當於document.querySelector
const html = await page.$eval('body', e => e.outerHTML);
獲取DOM節點屬性集合
$$eval相當於document.querySelectorAll
const textArray = await page.$$eval('#dom', els => Array.from(els).map(el => el.textContent));