django-screamshot is a very naive implementation of Web pages capture with CasperJS (aaAAaah!, phantomjs:))
(See the issues pages for more details about what remains to be done.)
First make sure you have the casperjs
command in your PATH
, using
related installation instructions.
Then install the egg :
pip install django-screamshot
- Add
screamshot
to yourINSTALLED_APPS
Add 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 :
- url
- The website URL to capture. This can be a fully qualified URL, or the name of a URL to be reversed in your Django project.
- selector
- CSS3 selector (default:
body
) - method
- HTTP method to be used (default:
GET
) - width
- Viewport width (default:
1400
) - height
- Viewport height (default:
900
) - data
- HTTP data to be posted (default:
{}
)
For example : http://server/capture/?url=http://django-fr.org&selector=h1&width=1024&height=768
You 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', }
You 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): ...
You can specify extra-args, such as --disk-cache=true
with the CLI_ARGS
setting :
SCREAMSHOT_CONFIG = { 'CLI_ARGS': ['--disk-cache=true', '--max-disk-cache-size=30000'] }
See related documentation on PhantomJS and CasperJS homepages.
If you want to test it using manage.py runserver
, you won't be able
to capture pages coming from the same instance.
Run it twice (on two ports) and configure CAPTURE_ROOT_URL
.
- Mathieu Leplatre <[email protected]>
- mozillag
- Lesser GNU Public License