[PYTHON] Verwenden Sie Ghost.py als Alternative zu PhantomJS

deck2pdf

In diesem Jahr habe ich ein CUI-Tool namens deck2pdf erstellt, das HTML-Folien erfasst und in PDF konvertiert.

Grundsätzlich, wie die Methode bei Google häufig herauskommt, "Jede Seite in PNG erfassen → Alle verbinden, um PDF zu erstellen", in Version 0

Ich habe es gemeinsam geschrieben. Also suchte und fand ich diese Ghost.py mit der Absicht, sie so weit wie möglich mit dem Python-Paket zu vereinheitlichen.

Lernen Sie Ghost.py kennen

Ghost.py ist ein in Python geschriebener WebKit-Client mit Sitzungen, Auswertungen, Screenshots und vielem mehr. Ich habe keinen detaillierten Vergleich mit PhantomJS usw. durchgeführt, aber ich hatte keine Probleme mit dem Mindestverhalten (obwohl ich feststeckte), also habe ich es so wie es ist in meinem eigenen Paket verwendet.

Versuchen Sie es mit Ghost.py

Versuchen Sie zu installieren

Ghost.py verwendet Qt, daher benötigen Sie PySide oder PyQt. Diesmal habe ich versucht, PySide zu verwenden.

$ brew install qt
$ pip install PySide==1.2.2
$ pyside_postinstall.py -install
$ pip install Ghost.py

Ergänzung

Eigentlich ist die neueste Version von PySide zu diesem Zeitpunkt 1.2.4, aber da 1.2.4 kein Mac-Rad hat, scheint es, dass der Build usw. funktioniert und die Installation lange dauern wird. Wenn Sie PySide zu diesem Zeitpunkt noch nicht installiert haben und es vorerst ausprobieren möchten, ist es meiner Meinung nach schneller, 1.2.2 wie oben beschrieben zu verwenden.

Versuchen Sie es mit

Starten Sie zuerst Ghost


>>> from ghost import Ghost
>>> ghost = Ghost()
>>> session = ghost.start()

Der clientseitige Prozess wird ausgeführt, wenn Sie eine Instanz von Ghost erstellen. Erstellen Sie eine Instanz der Sitzung mit der Methode start ().

Greifen Sie auf die Demoseite der HTML5-Folien zu


>>> resp = session.open('http://html5slides.googlecode.com/svn/trunk/template/index.html')
2015-12-20T18:02:12.662Z [WARNING ] QT: libpng warning: iCCP: known incorrect sRGB profile
2015-12-20T18:02:12.746Z [WARNING ] QT: libpng warning: iCCP: known incorrect sRGB profile
>>> type(resp)
<type 'tuple'>
>>> len(resp)
2
>>> resp[0]
<ghost.ghost.HttpResource object at 0x10a99f510>
>>> resp[1]
[<ghost.ghost.HttpResource object at 0x10a99f510>, <ghost.ghost.HttpResource object at 0x10a99f410>, <ghost.ghost.HttpResource object at 0x10a99f610>, <ghost.ghost.HttpResource object at 0x10a99f750>, <ghost.ghost.HttpResource object at 0x10a99f8d0>, <ghost.ghost.HttpResource object at 0x10a99f910>, <ghost.ghost.HttpResource object at 0x10a99fb10>, <ghost.ghost.HttpResource object at 0x10a99fc10>, <ghost.ghost.HttpResource object at 0x10a99fa10>, <ghost.ghost.HttpResource object at 0x10a99fd10>]
>>>
>>> resp[0].url
u'http://html5slides.googlecode.com/svn/trunk/template/index.html'
>>> resp[1][0].url
u'http://html5slides.googlecode.com/svn/trunk/template/index.html'
>>> resp[1][1].url
u'http://html5slides.googlecode.com/svn/trunk/slides.js'
>>> resp[1][2].url
u'http://fonts.googleapis.com/css?family=Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono'

Es ist schwer zu verstehen, ob es sich um eine interaktive Shell handelt, aber sie fordert alle Ressourcen an, auf die in der in "session.open (url)" angegebenen URL und dem angegebenen Inhalt verwiesen wird, und ruft sie ab.

>>> session.capture_to('capture_1.png')

Sie können einen Screenshot mit der Methode capture_to erstellen. Aber,,, capture_1.png

Wenn Sie den Erfassungsbereich nicht richtig angeben, wird es schrecklich. Oder es ist besser, die Größe im Voraus festzulegen, da der Ansichtsport festgelegt werden kann.

>>> session.capture_to('capture_2.png', region=(1940, 0, 3000, 740))
>>>

capture_2.png

Ein bisschen süchtig

Diese Ghost.py kann js direkt in der Sitzung aufrufen.

Verschieben Sie die Folien von html5slides auf die nächste Seite


>>> session.evaluate('nextSlide()')
(None, [])
>>> session.capture_to('capture_3.png', region=(1940, 0, 3000, 740))

capture_3.png

Die Folie bewegt sich nicht weiter, selbst wenn ich die Funktion zum Vorrücken und Erfassen der Folie ausführe. (Wenn Sie nextSlide auf normalem Chrome usw. ausführen, wird die Folie ohne Probleme fortgesetzt.)

Wie ich beim Erstellen von deck2pdf bestätigt habe, scheint die Ghost.py-Sitzung den zeitlichen Fortschritt dem Code außerhalb von Ghost.py anzuvertrauen. Wenn Sie also nichts tun, selbst wenn Sie den js-Code mit evalu aufrufen, wird er nur ausgeführt, wenn die Zeit vergeht.

python


>>> session.sleep(1)
>>> session.capture_to('capture_4.png', region=(1940, 0, 3000, 740))

Hier ist das Ergebnis des Gleitens für 1 Sekunde. Ich konnte den Folieninhalt problemlos erfassen. capture_4.png

Zusammenfassung

Obwohl es einige Macken wie diese gibt, kann ich einige Dinge tun, die auf WebKit basieren. Es schien also, dass ich verschiedene Dinge spielen könnte, wenn ich gut zurechtkomme.

Es scheint problematisch für Material wie den SpeakerDeck-Klon mit hoher Python-Reinheit oder das Erstellen von Folien aus Archiven, die HTML zusammenfassen.

Recommended Posts

Verwenden Sie Ghost.py als Alternative zu PhantomJS
Eine Alternative zu "Pause" in Python
Vorbereiten der Verwendung von Ansible auf einem vorhandenen Linux-Server
Geben Sie MinGW als den in Python verwendeten Compiler an
[Tipps] Verwendung des iPhone als Webkamera unter Linux
Erstellen einer Umgebung für die Verwendung von CaboCha mit Google Colaboratory
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Verwendung von Pandas 2
Poesie - Eine Alternative zu Pipenv
Verwendung von Virtualenv
Verwendung von pytest_report_header
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Gründe für die Verwendung von log
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Einfach zu bedienendes SQLite3
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Python-How zur Verwendung von Pyinstaller
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
Verwendung von Fujifilm X-T3 als Webcam unter Ubuntu 20.04
Es war zu einfach, eine vorhandene Datenbank mit Django zu verwenden
Verwendung von cuML SVC als Gridsearch-CV-Klassifikator
Verwenden Sie die REST-API mit JIRA (Benutzerregistrierung als Beispiel).
So verwenden Sie eine andere Datei als .fabricrc als Konfigurationsdatei
Verwendung diskreter Werte als Variablen in Scipy optimieren
Verwenden Sie Colab nur als externe GPU-Umgebung (ab 2020.6 / Mac-Umgebung).
Verwenden Sie Xming, um eine Ubuntu-GUI-Anwendung unter Windows zu starten.