From 1d4c214ac31e3a6b58e7762f8acc2737e6898fcd Mon Sep 17 00:00:00 2001 From: emdee Date: Wed, 16 Nov 2022 07:50:28 +0000 Subject: [PATCH] Change back to 1st arg being a URL or HTML file --- README.md | 20 ++++++++------------ qasync_phantompy.py | 16 +++++++--------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index e4281d4..e92564d 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,10 @@ that he wrote up in his PDF is generated. (YMMV - it segfaults for me. ) * Generate a HTML save file screenshot of the web page after it is completely loaded and the javascript has run. -* console.log’s will be printed to stdout. +* console.log's will be printed to stdout. * Easily add new features by changing the source code of this script, without compiling C++ code. For more advanced applications, consider - attaching PyQt objects/methods to WebKit’s JavaScript space by using + attaching PyQt objects/methods to WebKit's JavaScript space by using QWebFrame::addToJavaScriptWindowObject(). If you execute an external ```javascript-file```, phantompy has no @@ -27,12 +27,7 @@ reason, the external script should execute at the end ```console.log("__PHANTOM_PY_DONE__");``` when done. This will trigger the PDF generation or the file saving, after which phantompy will exit. -If no ```__PHANTOM_PY_DONE__``` string is seen on the console for 10 -seconds, phantom.py will exit without doing anything. This behavior -could be implemented more elegantly without console.log’s but it is -the simplest solution. - -It is important to remember that since you’re just running WebKit, you can +It is important to remember that since you're just running WebKit, you can use everything that WebKit supports, including the usual JS client libraries, CSS, CSS @media types, etc. @@ -40,7 +35,7 @@ libraries, CSS, CSS @media types, etc. * Python3 * PyQt5 (this should work with PySide2 and PyQt6 - let us know.) -* [qasyc](https://github.com/CabbageDevelopment/qasync) for the +* [qasnyc](https://github.com/CabbageDevelopment/qasync) for the standalone program ```qasync_lookup.py``` ## Standalone @@ -62,13 +57,13 @@ for the PyQt ```app.exec``` and the exiting of the program. We've decided to use the best of the shims that merge the Python ```asyncio``` and Qt event loops: [qasyc](https://github.com/CabbageDevelopment/qasync). This is seen as -the successor to the sorta abandonned[](https://github.com/harvimt/quamash). +the successor to the sorta abandoned[quamash](https://github.com/harvimt/quamash). The code is based on a [comment](https://github.com/CabbageDevelopment/qasync/issues/35#issuecomment-1315060043) by [Alex Marcha](https://github.com/hosaka) who's excellent code helped me. As this is my first use of ```asyncio``` and ```qasync``` I may have introduced some errors and it may be improved on, but it works, and -it not a monolithic Qt program. +it not a monolithic Qt program, so it can be used as a library. ## Usage @@ -82,7 +77,8 @@ The standalone program is ```quash_phantompy.py``` Path and name of PDF file to generate [] (optional) Path and name of a JavaScript file to execute ``` - +Setting ```DEBUG=1``` in the environment will give debugging messages +on ```stderr```. ## Postscript diff --git a/qasync_phantompy.py b/qasync_phantompy.py index 64394c8..3a5ebf3 100644 --- a/qasync_phantompy.py +++ b/qasync_phantompy.py @@ -55,16 +55,15 @@ async def main(widget, app, ilen): async with ContextManager() as ctx: for i in range(1, 120): seconds = await ctx.tick() - LOG.info(str(seconds)) - perc = 50 + int(float(len(app.lfps))*100.0/ilen) if widget: - widget.update(str(perc)) - LOG.debug(f"{app.lfps} {perc} {seconds}") - if len(app.lfps) == ilen: - print('\n'.join(app.lfps)) + widget.update(str(i)) + if len(app.ldone) == ilen: + LOG.info(f"Finished with {app.ldone}") + print('\n'.join(app.ldone)) app.exit() # raise asyncio.CancelledError - break + return + LOG.debug(f"{app.ldone} {perc} {seconds}") except asyncio.CancelledError as ex: LOG.debug("Task cancelled") @@ -93,8 +92,7 @@ def iMain(largs, bgui=True): LOG.info(f"queued {len(app.lstart)} urls") - # run until app.exec() is finished (Qt window is closed) - task = loop.create_task(main(widget, app, len(lelts))) + task = loop.create_task(main(widget, app, 1)) loop.run_forever() # cancel remaining tasks and wait for them to complete