On 01/15/2014 06:03 PM, mauro wrote:
> Un caloroso salve a tutti.
> 
> Vorrei chiedere aiuto e forse anche conforto spiriturale circa un problemino 
> su cui mi sto dissanguando da un po' di giorni.
> 
> ho la necessita' di usare webkit per interagire con un server web dove c'e' 
> piu' javascript che anima. In giro non mi pare di aver visto  prodotti che 
> possano tirar su una pagina html infarcita di javascript e gestirsela meglio 
> di webkit.
> 
> il codice, grosso modo deve caricarsi la pagina che gli indico (portandosi 
> appresso, per l'appunto tutto il codice javascript), lanciare una semplice 
> chiamata e ritornarmi un valore da usare nel resto dell'applicazione python.
> 
> A parte che non si trova documentazione fatta bene per pywebkit manco 
> ammazzato. Ho usato tutti i vari esempi trovati in rete, riferimenti sul sito 
> webkit ufficiale e ricerche a 360 gradi.
> 
> questo il codice:
> 
> 
> import webkit
> 
> w = webkit.WebView()
> w.load_uri('http://192.168.9.1')
> w.execute_script('document.title = STR_AJAX_VALUE')
> print w.get_main_frame().get_title()

> il problema non e' il come fare.... perche' questo script, eseguito in una 
> shell, 
> digitato a manina, riga per riga all'interno dell'interprete python
> funziona perfettamente e non sbaglia un colpo.

Penso derivi dal fatto che load_uri() non aspetta che la pagina sia
caricata / dom inizializzato / tutti gli script eseguiti, mentre quando
inserisci i comandi nell'interprete fai una pausa che da' il tempo
necessario al caricamento.

Giusto per fare una prova, questo dovrebbe funzionare:

import time
import webkit

w = webkit.WebView()
w.load_uri('http://192.168.9.1')
time.sleep(3)
w.execute_script('document.title = STR_AJAX_VALUE')
print w.get_main_frame().get_title()


Ovviamente non é il metodo piú pulito per fare questa cosa, ma quello
sleep di 3 secondi dovrebbe dare tempo agli script della pagina di
terminare l'esecuzione; un metodo piú pulito puó essere quello di
wrappare il codice javascript in un handler dell'evento "load", in modo
da garantire l'esecuzione *dopo* al resto del javascript della pagina,
anche se, anche in quel caso, la chiamata é asincrona, quindi devi
comunque trovare un modo di "bloccare" fino all'esecuzione del tuo
script (penso / spero che esista qualche modo di catturare eventi
javascript attraverso l'oggetto WebView, comunque..).



-- 
  Samuele ~redShadow~ Santi

----------------------------------------------------------------------


                  ----(  Contact information  )----

                   E-MAIL:  redsha...@hackzine.org
                     BLOG:  http://www.hackzine.org
                     WIKI:  http://wiki.hackzine.org
                  TWITTER:  https://twitter.com/_rshk
                   GITHUB:  https://github.com/rshk


                  ----(  GPG Key: 09F09951  )----

          1AFC FAE5 CA4B 3FB0 F300 FA64 3CB0 1008 09F0 9951


             ----(  Registered Linux-User: #440008  )----

              DEBIAN User since 2004 (I even used Sid!)
                     GENTOO User since 2008-01-01


----------------------------------------------------------------------

  Think about the environment: for each top-posted, badly quoted
  or bulk e-mail I receive, I'm going to cut down a tree.

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a