Cette année, j'ai créé un outil CUI appelé deck2pdf qui capture les diapositives HTML et les convertit en PDF.
En gros, comme la méthode sort souvent si vous google, "Capturez chaque page en PNG → connectez tout pour créer un PDF", en version 0
Je l'ai écrit de manière partagée. Donc, je cherchais et trouvais ce Ghost.py avec l'intention de l'unifier le plus possible avec le paquet Python.
Ghost.py est un client WebKit écrit en Python avec des sessions, des évaluations, des captures d'écran et plus encore. Je n'ai pas fait de comparaison détaillée avec PhantomJS etc., mais je n'ai eu aucun problème avec le comportement minimum (même si j'étais coincé), donc je l'ai utilisé dans mon propre package tel quel.
Ghost.py utilise Qt, vous avez donc besoin de PySide ou PyQt. Cette fois, j'ai essayé d'utiliser PySide.
$ brew install qt
$ pip install PySide==1.2.2
$ pyside_postinstall.py -install
$ pip install Ghost.py
En fait, la dernière version de PySide est la 1.2.4 à ce stade, mais comme la 1.2.4 n'a pas de roue Mac, il semble que la construction etc. fonctionnera et l'installation prendra du temps. Si vous n'avez pas installé PySide pour le moment et que vous souhaitez l'essayer pour le moment, je pense qu'il est plus rapide d'utiliser la 1.2.2 comme décrit ci-dessus.
Tout d'abord, commencez le fantôme
>>> from ghost import Ghost
>>> ghost = Ghost()
>>> session = ghost.start()
Le processus côté client s'exécute lorsque vous créez une instance de Ghost. Créez une instance de la session avec la méthode start ().
Accéder à la page de démonstration des diapositives HTML5
>>> 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'
Il est difficile de comprendre s'il s'agit d'un shell interactif, mais il demandera et obtiendra toutes les ressources référencées dans l'URL et le contenu spécifié dans session.open (url)
.
>>> session.capture_to('capture_1.png')
Vous pouvez prendre une capture d'écran avec la méthode capture_to. Mais,,,
Si vous ne spécifiez pas correctement la zone de capture, ce sera terrible. Ou il peut être préférable de fixer la taille à l'avance car le port de vue peut être défini.
>>> session.capture_to('capture_2.png', region=(1940, 0, 3000, 740))
>>>
Ce Ghost.py peut appeler js directement dans la session.
Déplacer les diapositives html5slides vers la page suivante
>>> session.evaluate('nextSlide()')
(None, [])
>>> session.capture_to('capture_3.png', region=(1940, 0, 3000, 740))
La diapositive n'avance pas même si j'exécute la fonction pour faire avancer la diapositive et la capturer. (Si vous exécutez nextSlide sur Chrome normal, etc., la diapositive se poursuivra sans problème)
Comme je l'ai confirmé en créant deck2pdf, il semble que la session Ghost.py confie la progression du temps au code en dehors de Ghost.py. Par conséquent, si vous ne faites rien, même si vous appelez le code js avec evaluer, il ne sera exécuté que si le temps avance.
python
>>> session.sleep(1)
>>> session.capture_to('capture_4.png', region=(1940, 0, 3000, 740))
Voici le résultat du glissement pendant 1 seconde. J'ai pu capturer le contenu de la diapositive sans aucun problème.
Bien qu'il y ait quelques bizarreries comme celle-ci, je peux faire des choses qui peuvent être faites sur la base de WebKit, donc il semblait que je pourrais jouer à diverses choses si je m'entendais bien.
Il semble que cela soit gênant pour du matériel tel que le clonage de SpeakerDeck avec une grande pureté Python ou la création de diapositives à partir d'archives qui résument le HTML.
Recommended Posts