2010-05-08 4 views

Répondre

1

Je vais essayer de prendre un coup de couteau à ceci:

Si vous voulez obtenir l'url d'une image à l'aide jQuery vous pouvez utiliser une approche comme celle-ci:

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import * 
app = QApplication(sys.argv) 
web = QWebView() 
web.load(QUrl("http://google.com")) 
frame = web.page().mainFrame() 

web.show() 

def loadFinished(ok): 
    print 'loaded' 
    frame.evaluateJavaScript(""" 
    //this is a hack to load an external javascript script 
    //credit to Vincent Robert from http://stackoverflow.com/questions/756382/bookmarklet-wait-until-javascript-is-loaded 
    function loadScript(url, callback) 
{ 
     var head = document.getElementsByTagName("head")[0]; 
     var script = document.createElement("script"); 
     script.src = url; 
     // Attach handlers 
     var done = false; 
     script.onload = script.onreadystatechange = function() 
     { 
       if(!done && (!this.readyState 
             || this.readyState == "loaded" 
             || this.readyState == "complete")) 
       { 
         done = true; 
         // Continue your code 
         callback(); 
       } 
     }; 

     head.appendChild(script); 
} 

// This code loads jQuery and executes some code when jQuery is loaded, using above trick 
loadScript("http://code.jquery.com/jquery-latest.js", function(){ 
    //we can inject an image into the page like this: 
    $(document.body).append('<img src="http://catsplanet.files.wordpress.com/2009/08/kitten_01.jpg" id="kitten"/>'); 
    //you can get the url before the image loads like so: 
     //detectedKittenImageUrl = $('#kitten').attr('src'); 
     //alert('detectedKittenImageUrl = ' + detectedKittenImageUrl); 
    //but this is how to get the url after it is loaded, by using jquery to bind to it's load function: 
    $('#kitten').bind('load',function(){ 
     //the injected image has loaded 
     detectedKittenImageUrl = $('#kitten').attr('src'); 
     alert('detectedKittenImageUrl = ' + detectedKittenImageUrl); 
     //Google's logo image url is provided by css as opposed to using an IMG tag: 
     //it has probabled loaded befor the kitten image which was injected after load 
     //we can get the url of Google's logo like so: 
     detectedGoogleLogoImageUrl = $('#logo').css('background-image'); 
     alert('detectedGoogleLogoImageUrl = ' + detectedGoogleLogoImageUrl); 
    }); 

}); 

    """) 

app.connect(web, SIGNAL("loadFinished(bool)"), loadFinished) 

sys.exit(app.exec_()) 

Si vous ne voulez pas charger jquery à partir du Web e temps haque vous pouvez télécharger jquery puis injectent comme ceci:

jQuerySource = open('jquery.min.js').read() 
frame.evaluateJavaScript(jQuerySource) 

vous pourriez aussi pas utiliser jQuery du tout, mais il est souvent une manipulation plus aisée, en fonction de ce que vous voulez faire.

Si vous voulez obtenir le contenu de l'image en tant que bitmap pas une URL, il peut être possible d'utiliser un objet canvas html, je ne sais pas si vous allez rencontrer des problèmes de sécurité inter-domaines. Une autre approche consisterait à utiliser pyQT pour obtenir l'image telle qu'elle apparaît. Si vous avez un format PNG avec transparence alpha, ce serait plus complexe, mais pour un JPEG opaque, par exemple, ce serait plus facile. Vous pouvez rechercher un code de capture d'écran de la page Web pour savoir comment procéder ou vous pouvez le télécharger à partir de l'URL trouvée dans Python. Une fois que vous avez eu la variable url en Javascript, vous devrez probablement utiliser la technique cross-the-boarder présentée sur this great slideshow pour obtenir la variable en Python à télécharger.

http://www.sivachandran.in/index.php/blogs/web-automation-using-pyqt4-and-jquery peut être aussi un exemple de code utile.

Questions connexes