Puppeteer
翻譯是操縱木偶的人,利用這個工具,咱們能作一個操縱頁面的人。Puppeteer
是一個Nodejs
的庫,支持調用Chrome的API來操縱Web
,相比較Selenium
或是PhantomJs
,它最大的特色就是它的操做Dom
能夠徹底在內存中進行模擬既在V8
引擎中處理而不打開瀏覽器,並且關鍵是這個是Chrome團隊在維護,會擁有更好的兼容性和前景。html
2、Puppeteer
用處1.一、Puppeteer要求node版本不低於v6.4.0,可是async/await只在Node v7.6.0或更高的版本支持。node
1.二、須要最近版本的Chromium瀏覽器chrome
1.Node.js 安裝配置shell
2.Puppeteer安裝npm
經過npm安裝:npm install puppeteer --saveapi
因爲封網,直接下載 Chromium
會失敗,能夠先阻止下載 Chromium
而後再手動下載它瀏覽器
手動下載 Chromium,下載完後將壓縮包解壓,會有個 ,將其放在你喜歡的目錄下,例如 。正常安裝包後 會在 中
# 安裝命令 npm i puppeteer --save # 錯誤信息 ERROR: Failed to download Chromium r515411! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download. # 設置環境變量跳過下載 Chromium set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 # 或者能夠這樣幹,只下載模塊而不build npm i --save puppeteer --ignore-scripts # 成功安裝模塊 + puppeteer@0.13.0 added 1 package in 1.77s
Chromium.app/Users/huqiyang/Documents/project/z/chromium/Chromium.appChromium.app.local-chromium
Tip:下載 Chromium
失敗解決辦法app
Chromium
源PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.org npm i puppeteer
cnpm
安裝npm install -g cnpm --registry=https://registry.npm.taobao.org cnpm i puppeteer
安裝 Jest:npm install --save-dev jestless
Puppeteer
,截個圖吧知識點async
puppeteer.launch
啓動瀏覽器實例browser.newPage()
建立一個新頁面page.goto
進入指定網頁page.screenshot
截圖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
const
puppeteer = require(
'puppeteer'
);
(async () => {
const
browser = await (puppeteer.launch({
// 如果手動下載的chromium須要指定chromium地址, 默認引用地址爲 /項目目錄/node_modules/puppeteer/.local-chromium/
executablePath:
'/Users/huqiyang/Documents/project/z/chromium/Chromium.app/Contents/MacOS/Chromium'
,
//設置超時時間
timeout: 15000,
//若是是訪問https頁面 此屬性會忽略https錯誤
ignoreHTTPSErrors:
true
,
// 打開開發者工具, 當此值爲true時, headless總爲false
devtools:
false
,
// 關閉headless模式, 不會打開瀏覽器
headless:
false
}));
const
page = await browser.newPage();
await page.
goto
(
'https://www.jianshu.com/u/40909ea33e50'
);
await page.screenshot({
path:
'jianshu.png'
,
type:
'png'
,
// quality: 100, 只對jpg有效
fullPage:
true
,
// 指定區域截圖,clip和fullPage二者只能設置一個
// clip: {
// x: 0,
// y: 0,
// width: 1000,
// height: 40
// }
});
browser.close();
})();
|