-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathpuppeteer.py
61 lines (54 loc) · 1.96 KB
/
puppeteer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import json
import os
import subprocess
from tempfile import NamedTemporaryFile
from screamshotter import __version__
from .exceptions import ScreenshotterException
from .settings import app_settings
from django.conf import settings
def take_screenshot(url, width=1920, height=1080, waitfor='body', wait_selectors=(),
selector='body', wait_seconds=1, timeout=settings.TIMEOUT, forward_headers=None,
screamshotter_css_class='screamshot'):
if forward_headers is None:
forward_headers = dict()
# We send sentry informations and version : when we use screamshotter as a package, informations are in settings only
with NamedTemporaryFile(suffix='.png') as screenshot_file:
command = subprocess.run([
"/usr/bin/dumb-init",
"--",
os.getenv('NODE_BIN_PATH', 'node'),
app_settings.PUPPETEER_JAVASCRIPT_FILEPATH,
'--version',
__version__,
'--sentrydsn',
settings.SENTRY_DSN or "",
'--sentryenv',
settings.SENTRY_ENVIRONMENT or "",
'--sentrytracerate',
f'{settings.SENTRY_TRACE_SAMPLE}',
'--url',
url,
'--path',
screenshot_file.name,
'--selector',
selector,
'--vwidth',
f'{width}',
'--vheight',
f'{height}',
'--waitseconds',
f'{wait_seconds * 1000}',
'--waitselectors',
json.dumps(wait_selectors),
'--waitfor',
waitfor,
'--timeout',
f'{timeout * 1000}',
'--screamshottercssclass',
screamshotter_css_class,
'--headers',
json.dumps(forward_headers),
], stderr=subprocess.PIPE, env=os.environ)
if command.stderr:
raise ScreenshotterException(command.stderr.decode())
return screenshot_file.read()