selenium 使用 PhantomJS 进行整个网页截图的 bug

2018-04-29 17:52:13 +08:00
 Hopetree

我使用 Python 控制 PhantomJS 来进行整个网页的截图的时候发现,当网页的总长度超过 32767px 的时候,截到的图片能够显示出来的长度最多只能到 32767px,后来查到 32767 这个数字是整形的最大值,所以,这个 bug 应该有一定的依据 ,请问有人试过吗?知道其中的原理吗?

6258 次点击
所在节点    程序员
16 条回复
larendorrx
2018-04-29 18:24:23 +08:00
稍微搜了一下,14 年就有这个 bug 了,现在 issue 还是 open 的。。项目早就不维护了
infun
2018-04-29 18:44:55 +08:00
pyvirtualdisplay
terence4444
2018-04-29 18:59:15 +08:00
selenium 已经不打算继续支持 PhantomJS 了
zeyexe
2018-04-29 19:53:26 +08:00
换 Chrome headless 试试吧
LosLord
2018-04-29 20:04:16 +08:00
自从 Chrome headless 出来后,phantom 的维护者就说了不打算继续维护了
Hopetree
2018-04-29 22:33:35 +08:00
@zeyexe
@LosLord Chrome 和火狐的无头浏览器都只能截屏当前屏幕显示的页面,无法截屏长网页
yh7gdiaYW
2018-04-29 22:44:30 +08:00
换 Puppeteer 试试?
murmur
2018-04-29 22:45:11 +08:00
32767px 是干嘛 压力测瀑布流么
creedowl
2018-04-30 09:36:26 +08:00
@zeyexe 请问 chrome-headless 为什么无法对单个元素截图?
Hopetree
2018-04-30 10:32:42 +08:00
@murmur 不是测试,我写了个整个网页截图的工具,就是为了截取整个网页
cleveryun
2018-04-30 11:48:48 +08:00
去年上半年有弄过在 node 下用 PhantomJS 截取整个网页,不过没有试过这么长的网页,我当时记得特别清楚的是这样截图好像特别慢,当时是对有数学公司的网页进行截图,初中高中数学题库一共下来几万(几十万?)张网页,用服务器跑了两三天才截完图片,好像平均截一张图要 6s 钟左右,太慢了。

想问问楼主现在写的工具截图速度怎么样?
zeyexe
2018-04-30 12:13:30 +08:00
@creedowl 根据我搜索的结果来看,应该是 selenium 并没有实现根据 DOM 截图的接口,现有的解决办法是算出要截图的 DOM 在网页中的位置,然后截取整个页面,然后用第三方工具裁剪。
creedowl
2018-04-30 14:47:03 +08:00
@zeyexe 应该是 chrome 的问题,我用 firefox-headless 就可以正常截取元素
lamCJ
2018-04-30 15:25:37 +08:00
这个问题我也遇到过 不是 phantomjs 的锅 同样的超长网页 我用专门浏览器截图插件 也截不完整甚至失败

应该是浏览器遵守了某个图片格式的像素上限 导致一系列工具截不了

SO 有个关于图片格式上限的讨论( 2 亿像素极限 一般程序能处理(误

<https://stackoverflow.com/q/4109447/4696448>
Hopetree
2018-04-30 17:26:48 +08:00
@cleveryun 我用的多进程,算下来平均每个网页要 10 秒,当然,这个跟网页的长度有关,我截的图都是比较长的,如果短的就比较快 Github 代码: https://github.com/Hopetree/MyTools/tree/master/ScreenShot
cleveryun
2018-04-30 18:56:56 +08:00
@Hopetree 恩,你这么一说我想起来了,我当时是同时跑两个 node 程序,分别守护两个子进程,一共两个进程一起截图的,我的图片比较小,但是因为需要等页面加载完之后还得等 js 渲染好页面上的数学公式才可以截,所以都是页面加载后等 3 秒才去截图的(有一定概率会截图没渲染好的,但是比较少就没考虑了),所以平均一张 6 秒左右,那估计 phantomjs 截图的效率上限差不多就是 3 秒一张小图了。

你的网站不错!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX