2010-04-30 23 views
2

J'ai des milliers d'URL de nombreux hôtes dont j'ai besoin de capture d'écran.Comment utiliser python-webkit2png pour prendre de nombreuses captures d'écran en même temps?

Je peux utiliser la lib-fine depuis la ligne de commande, mais comment puis-je l'intégrer dans mon code pour que je puisse prendre plusieurs captures d'écran simultanément?

Je pense que c'est quelque chose à voir avec xvfb comme avec la réponse à cette question: How to kill headless X server started via Python? mais je ne sais pas exactement quoi.

Répondre

0

Probablement quelque chose comme ça (non testé):

from webkit2png import WebkitRenderer, init_qtgui 
from PyQt4.QtCore import QTimer 

def renderer_func(): 
    renderer = WebkitRenderer() 
    renderer.width = 800 
    renderer.height = 600 
    renderer.timeout = 10 
    renderer.wait = 1 
    renderer.format = "png" 
    renderer.grabWholeWindow = False 

    outfile = open("stackoverflow.png", "w") 
    renderer.render_to_file(url="http://stackoverflow.com", file=outfile) 
    outfile.close() 

app = init_qtgui() 
QTimer.singleShot(0, renderer_func) 
sys.exit(app.exec_()) 

Ce fut sans vergogne arraché du source code of webkit2png.py.

+0

Merci, mais la partie qui me pose problème est l'utilisation de Xvfb – oldfellow

0

J'ai utilisé subprocess pour appeler webkit2png (qui a été installé via python-webkit2png), cela a fonctionné très bien.

def scrape_url(url, outpath): 
    """ 
    Requires webkit2png to be on the path 
    """ 
    subprocess.call(["webkit2png", "-o", outpath, "-g", "1000", "1260", 
        "-t", "30", url]) 

def scrape_list_urls(list_url_out_name, outdir): 
    """ 
    list_url_out_name is a list of tuples: (url, name) 
    where name.png will be the image's name 
    """ 
    count = 0 
    for url, name in list_url_out_name: 
     print count 
     count += 1 
     outpath = outdir + name + '.png' 
     scrape_url(url, outpath)