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: [email protected]
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.
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
