"""html-to-image""" # pylint: disable=too-many-statements, line-too-long, W0703, C0103, W1202, W1203, R0914 """ sudo yum install -y alsa-lib atk cups-libs GConf2 gtk3 pango libXcomposite libXcursor libXdamage libXext libXi libXrandr libXScrnSaver libXtst sudo yum groupinstall -y fonts export PYPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors python3 html-to-image.py "https://phus.lu" 1.png """ import asyncio import logging import os import sys import requests_html def html_to_image(url: str, filename: str) -> None: """take a screenshot for url""" for _ in range(3): session = requests_html.HTMLSession() try: logging.info(f'get {url}') resp = session.get(url) logging.info(f'get {url} return {resp}') resp.html.render(scrolldown=10, timeout=30, keep_page=True) async def snap_shoot(resp, filename): await resp.html.page.waitFor(2000) await resp.html.page.setViewport({'width': 1330, 'height': 1080}) await resp.html.page.screenshot({'path': filename, 'fullPage': True}) asyncio.get_event_loop().run_until_complete(snap_shoot(resp, filename)) except Exception as error: logging.error(f'html_to_image(url={url}, filename={filename} error: {error}') finally: session.close() if os.path.isfile(filename) and os.path.getsize(filename) > 100 * 1024: break def main(): """main function""" logging.basicConfig(level=logging.INFO) url, filename = sys.argv[1], sys.argv[2] html_to_image(url, filename) if __name__ == '__main__': main()