最近闲来无事,决定写个爬虫玩,用request+cheerio的方式已没有新鲜感,那试试谷歌推出的神器Puppeteer。
- 生成页面的屏幕截图和PDF。
- 抓取SPA并生成预先呈现的内容(即“SSR”)。
- 自动表单提交,UI测试,键盘输入等。
- 创建一个最新的自动化测试环境。使用最新的的JavaScript和浏览器功能,直接在最新版本的Chrome浏览器中运行测试。
- 捕获您网站的时间线跟踪,以帮助诊断性能问题。
你可以在浏览器中手动完成的大部分事情都可以使用Puppteer完成。但是今天不说Puppeteer怎么入门,来说说我是怎么被它无情折磨的。
安装步骤
全局安装 #方便其余项目使用
1 | npm install -g puppeteer |
新建test.js,编码实现生成页面截图
1 | const puppeteer = require('puppeteer'); |
执行生成截图
1 | node test.js |
然后我们看下,ok,目录下生成一张baidu.png!!!
这是想象的完美流程,这张截图我到现在还没有见到,且听我细细道来。
安装Puppeteer的坑
全局安装puppeteer
1 | npm install -g puppeteer |
安装这个puppeteer本地很快1分钟的样子,无奈服务器网络问题安装到40分钟时不动了,出于信任我又等了它十分钟!最后还是没有成功,卧槽 无情!
然后切换国内淘宝镜像,118mb,很快1分钟安装完成,
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
高高兴兴的执行node test.js
1 | (node:20042) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome! |
卧槽 无情! Chromium执行需要安装特定依赖,搜索一番去官方找了下依赖。
执行yum install安装依赖库,拭目以待吧!
1 | yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 -y |
1 | No package gtk3.x86_64 available. |
卧槽 无情! 我又搜索了很久,各种大佬各种说,复制黏贴一把梭,最后还是无情!
此时已是凌晨2点,算了还是睡觉吧
两天后点一个夜里… 我又没事啦,想起了无情,操起键盘又是一堆检索!
无果,我又运行了下 node test.js
1 | libatk-bridge-2.0.so.0: cannot open shared object file: No such file or directory |
回到问题本身,我又换回了检索词 libatk-bridge-2.0.so.0 再次在知识的海洋里遨游
又过了许久我翻了到一篇,也是归因安装依赖的问题,只不过依赖是其它应用copy过来,这不正符合no package的我嘛,又是一顿梭!!!
检测缺失的依赖包
1 | ldd chrome | grep not |
1 | # 检测结果 |
查找云端哪些软件下面包含对应的依赖包
1 | yum provides libatk-bridge-2.0.so.0 |
1 | ... |
注意:如果不是已安装状态,要先安装一下对应的软件名
找到对应的依赖包后,将依赖包复制或映射到对应的动态共享库目录中,一般是/usr/lib64/目录,复制或映射可以。
复制包到 /usr/lib64/
1 | cp /usr/lib64/firefox/bundled/lib64/libatk-bridge-2.0.so.0 /usr/lib64/ |
如上,依次安装其它依赖后,再一次满怀期待的执行 node test.js
1 | (node:32351) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome! |
卧槽 无情! 了解到这是chrome运行需要更高版本libc,涉及底层库升级,有反馈升级不当导致很多系统命令不可用的风险! 吓到睡觉!!!
次日,我又想起了无情,再次检索一番,得知需要更新glibc到2.16,复制黏贴又是一梭。
下载,解压,编译等操作(用 root 全权操作,最后两步用时比较久)
1 | wget https://ftp.gnu.org/gnu/glibc/glibc-2.16.0.tar.gz |
查看安装后的glibc有没有更新到2.16
1 | strings /lib64/libc.so.6 | grep GLIBC |
1 | ... |
更新完毕,最后一次执行node test.js
1 | symbol lookup error: /usr/lib64/firefox/bundled/lib64/libcairo-gobject.so.2: |
卧槽,无情!睡觉去啦!
…许久之后,尝试在执行代码的时候去火狐查找此库解决了这个问题1
LD_LIBRARY_PATH=/opt/glibc-2.16.0/lib/:/usr/lib64/firefox/bundled/lib64 node test.js
参考文章中的第2点 http://www.8y.work/index2.php/page/2/?thread-187.htm&orderby=asc
但是随之而来的还有其它问题,所以我决定升级我的center os,它太老啦 [😂]
最后
如上分享,希望能帮助到遇到同样场景的你。 对于太老的系统还是建议升级吧,许多依赖更新导致存在一堆的问题。