Capture full-page wkhtmltoimage shots
This commit is contained in:
@@ -31,6 +31,12 @@ _WKHTMLTOIMAGE_WIDTH = int(os.environ.get("WKHTMLTOIMAGE_WIDTH", "1920"))
|
||||
_WKHTMLTOIMAGE_HEIGHT = int(os.environ.get("WKHTMLTOIMAGE_HEIGHT", "1080"))
|
||||
_WKHTMLTOIMAGE_QUALITY = int(os.environ.get("WKHTMLTOIMAGE_QUALITY", "95"))
|
||||
_WKHTMLTOIMAGE_ZOOM = float(os.environ.get("WKHTMLTOIMAGE_ZOOM", "1.0"))
|
||||
_WKHTMLTOIMAGE_FULL_PAGE = str(os.environ.get("WKHTMLTOIMAGE_FULL_PAGE", "")).strip().lower() in (
|
||||
"1",
|
||||
"true",
|
||||
"yes",
|
||||
"on",
|
||||
)
|
||||
_env_crop_w = os.environ.get("WKHTMLTOIMAGE_CROP_WIDTH")
|
||||
_env_crop_h = os.environ.get("WKHTMLTOIMAGE_CROP_HEIGHT")
|
||||
_WKHTMLTOIMAGE_CROP_WIDTH = int(_env_crop_w) if _env_crop_w is not None else _WKHTMLTOIMAGE_WIDTH
|
||||
@@ -130,13 +136,13 @@ def take_screenshot_wkhtmltoimage(
|
||||
if image_format in ("jpg", "jpeg"):
|
||||
cmd.extend(["--quality", str(_WKHTMLTOIMAGE_QUALITY)])
|
||||
|
||||
if _WKHTMLTOIMAGE_HEIGHT > 0:
|
||||
if _WKHTMLTOIMAGE_HEIGHT > 0 and not _WKHTMLTOIMAGE_FULL_PAGE:
|
||||
cmd.extend(["--height", str(_WKHTMLTOIMAGE_HEIGHT)])
|
||||
|
||||
if abs(_WKHTMLTOIMAGE_ZOOM - 1.0) > 1e-6:
|
||||
cmd.extend(["--zoom", str(_WKHTMLTOIMAGE_ZOOM)])
|
||||
|
||||
if _WKHTMLTOIMAGE_CROP_WIDTH > 0 or _WKHTMLTOIMAGE_CROP_HEIGHT > 0:
|
||||
if not _WKHTMLTOIMAGE_FULL_PAGE and (_WKHTMLTOIMAGE_CROP_WIDTH > 0 or _WKHTMLTOIMAGE_CROP_HEIGHT > 0):
|
||||
cmd.extend(["--crop-x", str(_WKHTMLTOIMAGE_CROP_X), "--crop-y", str(_WKHTMLTOIMAGE_CROP_Y)])
|
||||
if _WKHTMLTOIMAGE_CROP_WIDTH > 0:
|
||||
cmd.extend(["--crop-w", str(_WKHTMLTOIMAGE_CROP_WIDTH)])
|
||||
@@ -269,10 +275,35 @@ def take_screenshot_for_account(
|
||||
"(function(){"
|
||||
"var f=document.getElementById('mainframe');"
|
||||
"function done(){window.status='ready';}"
|
||||
"function fit(){"
|
||||
"if(!f){done();return;}"
|
||||
"try{"
|
||||
"var doc=f.contentDocument||f.contentWindow.document;"
|
||||
"if(doc&&doc.body&&doc.documentElement){"
|
||||
"doc.body.style.height='auto';"
|
||||
"doc.documentElement.style.height='auto';"
|
||||
"doc.body.style.overflow='visible';"
|
||||
"doc.documentElement.style.overflow='visible';"
|
||||
"var h=Math.max(doc.body.scrollHeight,doc.documentElement.scrollHeight);"
|
||||
"if(h&&h>0){"
|
||||
"f.style.height=h+'px';"
|
||||
"var extra=0;"
|
||||
"var topBar=document.querySelector('.main-top');"
|
||||
"if(topBar){extra+=topBar.offsetHeight||0;}"
|
||||
"var container=document.querySelector('.main-container');"
|
||||
"if(container){extra+=container.offsetTop||0;}"
|
||||
"var total=h+extra+20;"
|
||||
"document.body.style.height=total+'px';"
|
||||
"document.documentElement.style.height=total+'px';"
|
||||
"}"
|
||||
"}"
|
||||
"}catch(e){}"
|
||||
"done();"
|
||||
"}"
|
||||
"if(!f){fit();return;}"
|
||||
f"f.src='{target_url}';"
|
||||
"f.onload=function(){setTimeout(done,500);};"
|
||||
"setTimeout(done,4000);"
|
||||
"f.onload=function(){setTimeout(fit,500);};"
|
||||
"setTimeout(fit,4000);"
|
||||
"})();"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user