Website screenshots

前端 未结 26 3568
长发绾君心
长发绾君心 2020-11-21 06:07

Is there any way of taking a screenshot of a website in PHP, then saving it to a file?

26条回答
  •  忘掉有多难
    2020-11-21 06:52

    There is a lot of options and they all have their pros and cons. Here is list of options ordered by implementation difficulty.

    Option 1: Use an API (the easiest)

    • ApiFlash (based on chrome)
    • EvoPDF (has an option for html)
    • Grabzit
    • ...

    Pros

    • Execute Javascript
    • Near perfect rendering
    • Fast when caching options are correctly used
    • Scale is handled by the APIs
    • Precise timing, viewport, ...
    • Most of the time they offer a free plan

    Cons

    • Not free if you plan to use them a lot

    Option 2: Use one of the many available libraries

    • dom-to-image
    • wkhtmltoimage (included in the wkhtmltopdf tool)
    • phpwkhtmltopdf
    • ...

    Pros

    • Conversion is quite fast most of the time

    Cons

    • Bad rendering
    • Does not execute javascript
    • No support for recent web features (FlexBox, Advanced Selectors, Webfonts, Box Sizing, Media Queries, HTML5 tags...)
    • Sometimes not so easy to install
    • Complicated to scale

    Option 3: Use PhantomJs and maybe a wrapper library

    • PhantomJs
    • php-phantomjs (php wrapper library for PhantomJs)
    • ...

    Pros

    • Execute Javascript
    • Quite fast

    Cons

    • Bad rendering
    • PhantomJs has been deprecated and is not maintained anymore.
    • No support for recent web features (FlexBox, Advanced Selectors, Webfonts, Box Sizing, Media Queries, HTML5 tags...)
    • Complicated to scale
    • Not so easy to make it work if there is images to be loaded ...

    Option 4: Use Chrome Headless and maybe a wrapper library

    • Chrome Headless
    • chrome-devtools-protocol
    • puphpeteer
    • ...

    Pros

    • Execute Javascript
    • Near perfect rendering

    Cons

    • Not so easy to have exactly the wanted result regarding:
      • page load timing
      • proxy integration
      • auto scrolling
      • ...
    • Complicated to scale
    • Quite slow and even slower if the html contains external links

    Disclaimer: I'm the founder of ApiFlash. I did my best to provide an honest and useful answer.

提交回复
热议问题