"""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()