Change back to 1st arg being a URL or HTML file

master
emdee 1 year ago
parent a06a1829d6
commit 1d4c214ac3

@ -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.logs 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 WebKits 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.logs but it is
the simplest solution.
It is important to remember that since youre 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```
<pdf-file> Path and name of PDF file to generate
[<javascript-file>] (optional) Path and name of a JavaScript file to execute
```
Setting ```DEBUG=1``` in the environment will give debugging messages
on ```stderr```.
## Postscript

@ -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

Loading…
Cancel
Save