V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Hopetree
V2EX  ›  程序员

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

  •  
  •   Hopetree ·
    Hopetree · Apr 29, 2018 · 6848 views
    This topic created in 2921 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    你的网站不错!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4377 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 10:13 · PVG 18:13 · LAX 03:13 · JFK 06:13
    ♥ Do have faith in what you're doing.