selenium 使用 PhantomJS 进行整个网页截图的 bug - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Hopetree
V2EX    程序员

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

  •  
  •   Hopetree
    Hopetree 2018-04-29 17:52:13 +08:00 6593 次点击
    这是一个创建于 2720 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    你的网站不错!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5218 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 08:25 PVG 16:25 LAX 01:25 JFK 04:25
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86