2017-10-18 7 views
0

J'ai un site Web qui nécessite une connexion (authentification) qui a une page de messages que je veux convertir tous les commentaires à pdfs. A l'origine, je ne faisais que cliquer sur chaque commentaire et choisir d'imprimer dans le navigateur Firefox et enregistrer le flux de commentaires en format pdf. Le problème est qu'il y en a tellement, j'ai donc décidé d'écrire un script python mais j'ai des problèmes. Voici mon code:Comment convertir page web au format pdf en python comme la sauvegarde en option pdf en version imprimée

import mechanize 
import pdfkit 
import os 

br = mechanize.Browser() 
br.set_handle_robots(False) 
br.addheaders = [("User-agent","Firefox")] 
sign_in = br.open("www.mysite.com") 

br.select_form(nr = 0) 
br["username"] = "username" 
br["password"] = "password" 
logged_in = br.submit() 

br.open("comments_page") 
all_comment_links = [] 

# Iterate the links 
for link in br.links(): 
    if "comment" in link.url: 
    all_comment_links.append(link) 

for l in all_comment_links: 
    ret = br.open("comments_page").read() 
    pdfkit.from_url(l.url, l.text + ".pdf") 
    # pdfkit.from_string(ret, l.text + ".pdf") 

    file = open(l.text + ".html", "w") 
    file.write(ret) 
    file.close() 

# try from file 
#for f in glob.glob("*.html"): 
# pdfkit.from_file(f, f.replace(".html", ".pdf")) 

Je suis en train d'utiliser le PDFKit lib pour convertir chaque page de commentaires au format PDF, mais ont échoué. Je l'ai essayé d'utiliser l'URL (pdfkit.from_url), juste la chaîne (pdfkit.from_string) et enregistrez le html dans un fichier (pdfkit.from_file) mais ne peut pas comprendre pourquoi cela ne fonctionne pas. Pour autant que je sache, les trucs mécanisés fonctionnent parce que mes fichiers html contiennent tous les commentaires que je veux avec le bon contenu. J'ai regardé autour de différentes approches, mais c'est aussi loin que je suis arrivé à ce que je veux.

Le script ne jette pas d'erreur, il se bloque juste au premier pdf comme il ne peut pas accéder à la page/contenu. Je l'ai laissé fonctionner pendant un moment mais seulement le premier fichier pdf est créé, mais quand j'essaie de l'ouvrir, il dit qu'il est corrompu. Est-ce que j'utilise le pdfkit incorrect ou devrais-je employer quelque chose d'autre pour convertir ces pages en pdf? Merci, et toute aide est appréciée. En cours d'exécution sur Mac OS X.

+1

envisager de passer à Selenium. J'aime vraiment les cauchemars pour des choses comme ça ces jours-ci. – pguardiario

+0

@pguardiario a fini par utiliser du sélénium, beaucoup mieux. –

Répondre

0

Mon estimation initiale est que PDFKit ne reçoit aucune information de la session de mécaniser il essaie donc d'utiliser des pages derrière l'authentification sans être connecté.

Vous devriez probablement d'abord télécharger html avec mécaniser puis le convertir localement.

Cependant, puisque vous dites que vous n'obtenez des résultats également à partir du fichier, vous devez essayer shell Python interactif et essayer appliquer PDFKit à un fichier local manuellement, voir ce que l'erreur que vous obtenez.

Autre chose peut être que l'une des entrées PDFKit ou des fichiers de sortie ne sont pas dans le répertoire que vous pourriez vous attendre raisonnablement, devrait donc essayer des chemins absolus comme paramètres.