Python SDK for the Rendershot screenshot & PDF generation API
Project description
rendershot-python
Python SDK for the Rendershot screenshot & PDF generation API.
Installation
pip install rendershot
Quick start
import rendershot
# Sync client
client = rendershot.RenderShotClient(api_key='your-api-key')
# Capture a screenshot
png_bytes = client.screenshot_url('https://example.com')
# Save directly to a file
client.screenshot_url_to_file('https://example.com', 'screenshot.png')
# Render a PDF
pdf_bytes = client.pdf_url('https://example.com')
client.pdf_html_to_file('<h1>Hello</h1>', 'output.pdf')
# Check your balance
balance = client.get_balance()
print(balance.credits_remaining)
Async client
import asyncio
import rendershot
async def main():
async with rendershot.AsyncRenderShotClient(api_key='your-api-key') as client:
png = await client.screenshot_url('https://example.com')
await client.pdf_url_to_file('https://example.com', 'report.pdf')
asyncio.run(main())
Bulk rendering
All bulk methods submit jobs via the /v1/bulk endpoint, poll until complete, and save results to a folder.
# Bulk screenshots from URLs
paths = client.bulk_screenshot_urls(
['https://example.com', 'https://github.com'],
output_dir='/tmp/screenshots',
)
# Bulk PDFs from an HTML Jinja2 template (great for invoices)
template = '''
<html><body>
<h1>Invoice #{{ invoice_id }}</h1>
<p>Amount: ${{ amount }}</p>
</body></html>
'''
paths = client.bulk_pdf_from_template(
template,
contexts=[
{'invoice_id': 1001, 'amount': '99.00'},
{'invoice_id': 1002, 'amount': '149.00'},
],
output_dir='/tmp/invoices',
)
Handling networkidle timeouts
Some URLs never reach networkidle (e.g. sites with persistent WebSocket connections or infinite polling). Use timeout_fallback_to='domcontentloaded' to automatically retry with wait_for='domcontentloaded' when a timeout occurs:
# Single URL — retries automatically on timeout
png = client.screenshot_url(
'https://example.com',
timeout_fallback_to='domcontentloaded',
)
# Save to file
client.screenshot_url_to_file(
'https://example.com',
'sport5.png',
timeout_fallback_to='domcontentloaded',
)
# Bulk — each timed-out job is individually retried
paths = client.bulk_screenshot_urls(
urls=['https://example.com', 'https://example2.com'],
output_dir='./screenshots',
timeout_fallback_to='domcontentloaded',
)
Configuration
| Parameter | Default | Description |
|---|---|---|
api_key |
required | Your Rendershot API key |
base_url |
https://api.rendershot.io |
API base URL |
Bulk methods also accept poll_interval (seconds, default 2.0) and timeout (seconds, default 300.0).
Error handling
from rendershot import exceptions
try:
client.screenshot_url('https://example.com')
except exceptions.AuthenticationError:
print('Invalid API key')
except exceptions.RateLimitError as e:
print(f'Rate limited, retry after {e.retry_after}s')
except exceptions.JobFailedError as e:
print(f'Job {e.job_id} failed')
except exceptions.APIError as e:
print(f'API error {e.status_code}: {e.detail}')
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rendershot-0.1.7.tar.gz.
File metadata
- Download URL: rendershot-0.1.7.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19a5664bf162ae0a542f0c3554e9988e81dce9dac90e54e88fc9de81d1298cf3
|
|
| MD5 |
04479529ebdf75f1f7f15078b8e175ea
|
|
| BLAKE2b-256 |
9bc2a36b7a762cd555986a44f1f57f88871dd6377822bae32fe485b8037efe01
|
File details
Details for the file rendershot-0.1.7-py3-none-any.whl.
File metadata
- Download URL: rendershot-0.1.7-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c175ac755080e6252c2fe3899261b21b880dc2a94530a9d23f6e45d18a2f49d
|
|
| MD5 |
d0fcf60dbf4d758f8f649768415ac797
|
|
| BLAKE2b-256 |
dcc301c0cf2247d6ab2e3a31fc5f84fce949336102b36a699154ffdad5ad6636
|