你可以在浏览器中手动完成的大部分事情都可以使用 Puppeteer
完成!你可以从以下几个示例开始:
想要在项目中使用 Puppeteer
,只需要运行如下命令安装即可;不过要注意的是:Puppeteer
至少需要 Node v6.4.0,如要使用 async / await,只有 Node v7.6.0 或更高版本才支持;另外,安装 Puppeteer
时,它会下载最新版本的 Chromium(〜71Mb Mac,〜90Mb Linux,〜110Mb Win),保证与 API 协同工作。
yarn add puppeteer
# or "npm i puppeteer"
对于如何使用 Puppeteer
,这非常之容易;如下简易的示例,即实现了:导航到 https://example.com
并将截屏保存为 example.png;
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
更多示例可参考 GoogleChrome Puppeteer Usage;在略为熟悉 Puppeteer的 Api 之后,即可用来她操纵浏览器,来为你做些你想搞的事儿;不过值得一提的是,她现在还处于开发阶段,随着版本的更替,Api 接口也有可能会跟着略有变动。Toss Puppeteer,这是在 Github 创建的一个仓库,以承载尝试使用 GoogleChrome Puppeteer 做的各种的折腾,具体如下:
微注: 鉴于个人信息不便于提交,已设置 git 提交忽视私密配置文件;如要运行如下几个 Demo,需要手动在
src/config
目录下,创建 secret.js,格式如 secretSample.js 所示(?️)。
这番折腾,是基于 Puppeteer
抓取某网页链接( 具体是在 https://jeffjade.com/categories/Front-End/ 中随机出一篇),将其推送到技术头条;其目的在于:练习初步运用 Puppeteer
。
git clone https://github.com/nicejade/toss-puppeteer
npm i (更推荐 yarn)
yarn run shareBlogToBlogread
处于某些分享需要,偶尔会涉及到这样的需求即:分享指定链接(Url)到指定网站;这个相比于如上功能,要省却些步骤。如果愿意折腾的话,还可以提交至多个不同的目标网站,只需增加设定目标地址,登录方式,以及提交表单的信息即可。当然,对于涉及到登录需要复杂的验证网站,额外需要多做些处理。这里只对技术头条做了配置,运行如下命令即可:(Update@17-12-17)
Url=https://jeffjade.com/2017/09/28/127-nice-front-end-tutorial/ yarn run shareUrlToTheSite
url=https://jeffjade.com/2017/09/28/127-nice-front-end-tutorial/ yarn run shareUrlToTheSite
此番折腾,是基于 Puppeteer
抓取指定网站页面(示例是 https://jeffjade.com/ 所有文章),并将其打印成 PDF;其目的在于:进一步熟悉运用 Puppeteer
。
git clone https://github.com/nicejade/toss-puppeteer
npm i (更推荐 yarn)
npm run printWebsiteToPDF
axios
& cheerio
抓取分页并分析,从而得到网站所有文章链接,并存储在数据中;async
控制并发),在页面渲染完成之后,将其打印成 PDF 并保存。Gitment
评论系统早前在 About Me有如此感叹道:
嗟夫,真真是:独立的才是自己的。博客从最开始用多说,17年6月1日关闭服务后,转战网易云跟帖;未曾想它8月1日也跟着关闭了。索性转投靠至国外Disqus,奈何这堵墙厉害之极,家里虽也翻了墙,却仍不能很好访问;这才又转战至 Gitment;?言多皆泪,感慨颇多啊——独立的才是自己的,之后得空时候,还是自己搞一套?,Fighting。
这提及的 Gitment 是基于 GitHub Issues 的评论系统;它本身的一些特征,使得它存在很多优势,对于维护“程序”相关话题博客。所以,个人博客晚晴幽草轩就采用此评论系统;但,它也会存在一些问题,譬如需要主动初始化评论,initialize-your-comments,当然也可以运用些工具协助完成✅。对于已经写了 140+ 篇博文的晚晴幽草轩,这实在很有必要;所以,这里谈及即,使用 Puppeteer
一键来初始化 Gitment
评论系统(需要注明的是,每个系统结构有所区别,这里只具有些参考性,却不能直接加以使用)。
git clone https://github.com/nicejade/toss-puppeteer
npm i (更推荐 yarn)
npm run initializeGitment
axios
& cheerio
抓取分页并分析,从而得到网站所有文章链接,并存储在数据中;async
控制并发);寄存的博客评论,可在 jadeblog-backups#issues 查看;(实际上,在使用 Gitment
之时,触发初始化按钮,并未能真正完成初始化,猜测这可能是插件本身的问题,或者别的,需要进一步探究)(Update@17-11-23)。
Puppeteer Trace
做性能分析可以使用 tracing.start
和 tracing.stop
创建一个可以在 Chrome 开发工具或时间线查看器中打开的跟踪文件(每个浏览器一次只能激活一个跟踪),具体参见 Puppeteer Trace Api。
await page.tracing.start({path: 'trace.json'})
await page.goto('https://www.google.com')
await page.tracing.stop()
git clone https://github.com/nicejade/toss-puppeteer
npm i (更推荐 yarn)
npm run performanceAnalysis
对于 Chrome Performance/Timeline,如何使用,可以参见 Chrome 开发者工具,或者移步至 Chrome Tutorial,这里有比较详尽的,不断补充修缮的参考资料。
前面就有提及,使用 Puppeteer,相当于同时具有 Linux 和 Chrome 双端的操作能力,应用场景可谓非常之多;上面这些只是闲余时间写来玩儿的,而真正可以做的,会随着你的想象力扩散而增加;比如高级爬虫,实现前端监控诸此等等;对于前端监控这项,可以一提的是,完全可以借鉴 capture webpage and diff the dom change with phantomjs ♨ 类似思想,结合 Puppeteer、MongoDB 等器具,实现一套前端页面前端监控,实现定期检查同时,还能辅助于测试,在这一点上可以比 Sentry 做的更多;个中实现,有待继续摸索实践。
额外需要补充说明的是,关于此文章的命名;无端由的加了一个“大”字;倒不完全是因为,“前端开发者”在相关行业,承担着越来越多的重要工作;而其本身也要不断学习、充实知识库;入围门槛的难度也在逐步增加;凡此等等,在与时俱进版前端资源教程一文中,可见一斑;不幸的是,在同类相轻的鄙视链中,却总有些个别的“合作者”,在工作中只因角色分工的不同,而缺少对人应有尊重;虽然,个人倒不自定为前端开发者,遇到这种恶,总免不了惹起骨子里的侠义;可以言说的是:角色之设定高明与否,相关从业者本身可以自嘲,外人何由来的轻责与漫蔑?王小波先生在他的杂文关于格调的最后有写到:“对于一件愚蠢的事,你只能唱唱反调”;“大”这一字,如此而已。
@2017-12-17 于深圳.南山 Last Modify: 2017-12-17