Package: django-screamshot
django-screamshotdjango-screamshotis avery naiveimplementation of Web pages capture
withCasperJS(aaAAaah!,phantomjs:))(See the issues pages for more details about what remains to be done.)Checkoutscreamshotter,
the simplest Django project powered bydjango-screamshot.INSTALLFirst make sure you have either thecasperjsorphantomjscommand in yourPATH, using
related installation instructions:CasperJS.PhantomJS.Then install the egg :pip install django-screamshotUSAGEAddscreamshotto yourINSTALLED_APPSAs a screenshot Web APIAdd it to your project URLs :urlpatterns = patterns('',
    ...
    url(r'^capture/$',  include('screamshot.urls', namespace='screamshot', app_name='screamshot')),
)You can then obtain a screenshot using the following GET parameters :urlThe website URL to capture. This can be a fully qualified URL, or the
name of a URL to be reversed in your Django project. Note: do not forget to
encode the url.selectorCSS3 selector. It will restrict the screenshot to the selected element.methodHTTP method to be used (default:GET)widthViewport width (default:1400)heightViewport height (default:900)dataHTTP data to be posted (default:{})waitforCSS3 selector. The screenshot will be performed only once this selector is
satisfied. Typical usage: if your page contains a heavy javascript processing,
you can add a CSS class on an element when the processing is finished to make
sure the screenshot will get the page properly rendered.renderIf render=html, it will return an HTML page containing the image and where the
print diaplo box will be automatically opened.sizeResize image (width x height, e.g:500x500), need installPILorPillow.cropIftrue, then resulting image is cropped to match specified size.For example :http://server/capture/?url=http://django-fr.org&selector=body&width=1024&height=768&size=500x500As a template tagYou can include screenshots in your pages using a template tag. It will
perform the capture and return the base64 version of the resulting image.This is very useful if you don’t want to expose the capture API publicly.{% base64capture URL SELECTOR %}For example, in a SVG template :{% load screamshot %}
...

<image
   y="200"
   x="300"
   id="imagemap"
   xlink:href="data:{% base64capture "company:map" "#map" %}"
   width="640" />If you run the capture server on a different instance, you can specify the
root url for reversing (default is local) :SCREAMSHOT_CONFIG = {
    'CAPTURE_ROOT_URL': 'http://127.0.0.1:8001',
}As a library - render local Django templateSometimes, you don’t have access to the request object. A typical example would be creating a PDF receipt for a customer and emailing it. Both of these tasks can take a while, so it is natural to push them into some queue (like RabbitMQ). But if your pdf-rendering task get’s executed, you don’t have access to the request object. Don’t worry - you can still use screamshot as a library. Here’s how.from screamshot.utils import render_template

# you can either render the template to a TemporaryFile:

with render_template('my-template.html', {'context': 'variables'}) as output:
    # do anything you want with the output
    # like attach it to email message, etc.
    print(output.name)

# or you can specify a path instead:
render_template('my-template.html',
    {'context': 'variables'},
    output='/home/you/rendering.png',
    format='png')Please note, that in order to load your static files, screamshot will try to replace all STATIC_URL occurence with a local path to your static files (only if they are not hosted via https of course)Customizing the page renderingThe CasperJS script appends thescreamshotCSS class on thebodyelement.
You can easily customize the rendering for printing using this CSS marker in
your CSS stylesheet:.screamshot #navigation {
  display: none;
}
.screamshot #main {
  margin: 2em;
}Capture views with authenticationYou can use Basic HTTP authentication in your Django project, create a dedicated
user for screenshots and capture the full URL with credentials (http://user:password@host/page/).Alternatively, you can use a specific view decorator.Define the authorized IP to capture your pages in your settings :SCREAMSHOT_CONFIG = {
    'CAPTURE_ALLOWED_IPS': ('127.0.0.1',),
}And use the provided decorator :from screamshot.decorators import login_required_capturable


@login_required_capturable
def your_view(request):
    ...Renderer command and CLI argumentsYou can specify which renderer you would like to use, by setting theCAPTURE_METHODsetting. The default value is ‘casperjs’. Possible values
are ‘casperjs’ and ‘phantomjs’.SCREAMSHOT_CONFIG = {
    'CAPTURE_METHOD': 'phantomjs',
}By default, we look for thr CasperJS/PhantomJS binary in thePATHenvironment variable (likewhich), but you can bypass this:SCREAMSHOT_CONFIG = {
    'CASPERJS_CMD': '/home/you/Downloads/apps/casperjs',
    'PHANTOMJS_CMD': '/home/you/Downloads/apps/phantomjs'
}Please note, that theCAPTURE_METHODsetting specifies which location would
be evaluated, i.e. if you setCAPTURE_METHODto ‘phantomjs’,PHANTOMJS_CMDwould be evaluated.You can also specify PhantomJS/CasperJS extra-args, such as--disk-cache=truewith theCLI_ARGSsetting :SCREAMSHOT_CONFIG = {
    'CLI_ARGS': ['--disk-cache=true', '--max-disk-cache-size=30000']
}See related documentation on PhantomJS and CasperJS homepages.You can also override the capture script. A default implementation uses capture
script written for CasperJS. A default capture script for PhantomJS is also provided.If you have your own script which you would like to use, specify it inCAPTURE_SCRIPToption.SCREAMSHOT_CONFIG = {
    'CAPTURE_SCRIPT': '/home/you/scripts/capture.js',
}You can add timeout corresponding to maximum time to wait for CSS3 selector (see waitfor option)SCREAMSHOT_CONFIG = {
    'TIMEOUT': 7000 #ms 5000 by default,
}Notes about runserverIf you want to test it usingmanage.py runserver, you won’t be able
to capture pages coming from the same instance.Run it twice (on two ports) and configureCAPTURE_ROOT_URL.AUTHORSMathieu Leplatre <mathieu.leplatre@makina-corpus.com>mozillagdynamicguyEric Brehault <eric.brehault@makina-corpus.com>LICENSELesser GNU Public LicenseCHANGELOG0.8.5 (2020-04-09)Fix support Django 2, 2.1, 2.20.8.4 (2020-04-08)Add support Django 2, 2.1, 2.2Add waittimeout settings0.8.2 (2018-07-04)Response errors status code from 400 to 5000.8.1 (2017-06-14)Fix phantom path in PATH0.8.1 (2017-05-05)Fix python 3 supportAdd support for Django 1.11Drop support for Django <1.80.7.0 (2017-01-08)Support for rendering PDFPython 3 supportDjango 1.8 supportAdd TEST_CAPTURE_SCRIPT setting0.6.0 (2014-11-27)Added support of pure PhantomJS capture, i.e. without CasperJS, without selector (by Mateusz Mikolajczyk)Support for capturing locally rendered templates, without external request (by Mateusz Mikolajczyk)0.5.0 (2014-11-11)Added screenshot model and adminsite support (by Luc Milland)Allows to wait for a given time (milliseconds) before doing the screenshot (by Florent Lebreton)Replace mimetype by content_type in HttpResponse for django1.7 compliance (by Florent Lebreton)0.4.0 (2014-03-19)If URL not provided, use request’s host (by Mozillag)Allow to provide a custom PhantomJS command (by mo-mughrabi)Improved loggingAdded some minimalistic unit tests0.3.1 (2014-01-31)Fix requirement spelling0.3.0 (2013-09-05)Return appropriate HTTP responses on parameter errors (400)Better processing of capture errors, not for remote JS yet. (ref #1)Save temporary file step is specified output forcasperjs_captureis a filepathAdd ascreamshotterorphan branch, as a demo Django projectAbility to control image format (other thanpngorhtml)0.2.0 (2013-08-18)CASPERJS_CMD setting to bypass PATH lookupQuerycropparameter to control resizeQuerysizeparameter to control image sizeQueryrenderparameter to control output formatRemoveremote.messagelogingQuerywaitForparameter to control capture timingInjectscreamshotclass onbodyto allow capture stylingUse capture instead of captureSelector if no selector providedQuery parameters to control viewport sizeAbility to add extra command-line argumentsUpdated CasperJS CLI status codeDetect forwarded IP address in login decorator0.1.1 (2012-04-17)Include package data0.1.0 (2012-04-17)Initial working version