Come posso mettere tutti i comandi della saia insieme in un pezzo di codice in un file .py?
Domanda
Ho appena iniziato ad esplorare TWILL .
Twill è un linguaggio di scripting sorprendente per la navigazione Web e fa tutto quello che voglio !!!
Finora ho usato twill da una shell Python ( IDLE (Python GUI) per la precisione) e io ci faccio le cose nel modo di eseguire comandi uno per uno (voglio dire, digito un comando, eseguirlo, quindi digitare il comando successivo):
(fonte: narod.ru )
(fonte: narod.ru )
(fonte: narod.ru )
(fonte: narod.ru )
(fonte: narod.ru )
(fonte: narod.ru )
(fonte: narod.ru )
Ma io non so come mettere tutti questi comandi insieme in un unico file .py, in modo che essi sarebbero stati tutti eseguiti uno per uno automaticamente.
Sembra che ci sia questa possibilità in twill. Questo esempio dalla pagina di documentazione saia (si può vedere qui ) ci mostra un pezzo di codice costituito da vari comandi:
(fonte: narod.ru )
Quindi, la mia domanda è: Come posso mettere tutti i comandi insieme in twill?
Aggiornamento 1:
(questo aggiornamento è la mia risposta a S.Marco)
Ciao, S.Marco !!! Mi dispiace per il ritardo di risposta. Prima di tutto, alcune informazioni circa la posizione della mia twill e cartelle relative pitone:
Il percorso in cui Python2.5 è installato sul mio computer: C: \ Python25
Il percorso per il mio twill-0.9 sul mio computer ora: E: \ tmp \ twill-0.9
dire Let voglio i seguenti comandi da eseguire automaticamente:
go http://www.yahoo.com
save_html result.html
Il codice dovrebbe esaminare pagina Yahoo e quindi salvare il suo codice HTML in file di result.html. Così, cercando di seguire le vostre istruzioni, ho innanzitutto creato un file “test.txt” che contiene questo codice composto da soli 2 linee e salvato il file come “test.twill” nella cartella twill-0.9, il che significa che tcappello il percorso completo al file ora è stato di E: \ tmp \ Saia-0.9 \ test.twill
Poi ho cercato di passare il nome del file come parametro per Saia-sh comando in molti modi diversi, ma non ha mai funzionato (Devo aver fatto qualcosa di sbagliato):
(fonte: narod.ru )
(fonte: narod.ru )
Ma sai cosa, ho deciso di sperimentare un po 'e ha creato un file test.py che conteneva anche solo quei due comandi. Questo file ho anche inserito nella cartella twill-0.9 (E: \ tmp \ Saia-0.9 \ test.py) e poi ho deciso di provare a eseguirlo da twill di shell utilizzando il comando RUNFILE di twill, e, a sorpresa, ha funzionato! :
(fonte: narod.ru )
Dopo l'esecuzione di esso, ho guardato il mio C: \ Python25 cartella e ho trovato il file appena creato result.html ci
Bene, quello che ho fatto qui è semplicemente in esecuzione di un file dalla shell twill utilizzando un comando twill. Mentre al momento è esattamente quello che mi serve, altri sostenitori (come potete vedere qui sotto) suggerisco devo fare tutte le cose da shell Python, non dal twill di shell, e questo è qualcosa che io ancora non so come fare.
Il mio prossimo passo sarà quello di provare a eseguire un codice simile a “Google App Engine”, ma non c'è, per quanto ne so, solo Python viene riconosciuto, non è saia, il che significa che se so solo come fare le cose in twill, ma non in python, non sarò in grado di avere “Google App Engine” eseguire i miei comandi.
Aggiornamento 2:
(Venerdì 23 aprile 2010, 03:48:15 (GMT + 0.00))
(Questo aggiornamento è la mia seconda risposta a S.Marco)
Sembra che l'esecuzione da riga di comando non è riuscita neanche:
(fonte: narod.ru )
Soluzione
Mettere i comandi twill in un file, ad esempio test.twill
setlocal query "twill Python"
go http://google.com/
fv 1 q $query
submit btnI # use the "I'm feeling lucky" button
show
E poi basta passare il nome del file come parametro per Saia-sh di comando, come
python twill-sh test.twill
E si potrebbe desiderare di controllare i codici di esempio nella cartella .twill tests
di twill fonte
test-back.twill
test-basic.twill
test-dns.twill
test-equiv-refresh.twill
test-find.twill
test-form.twill
test-formfill.twill
test-global-form.twill
test-go-exit.twill
....
Altri suggerimenti
Qui è in azione (cambiato un pochino):
>>> import twill.commands
>>> import BeautifulSoup
>>>
>>> class browser:
... def __init__(self, url="http://www.google.com",log = None):
... self.a=twill.commands
... self.a.config("readonly_controls_writeable", 1)
... self.b = self.a.get_browser()
... self.b.set_agent_string("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14")
... self.log = log
... self.b.clear_cookies()
... self.url=url
... def googleQuery(self, query="python code"):
... self.b.go(self.url)
... #self.b.showforms()
... f = self.b.get_form("f")
... #print "form is %s" % f
... f["q"] = query
... self.b.clicked(f, "btnG")
... self.b.submit()
... pageContent = self.b.get_html()
... soup=BeautifulSoup.BeautifulSoup(pageContent)
... ths = soup.findAll(attrs={"class" : "l"})
... for a in ths:
... print a
...
>>> t=browser()
>>> t.googleQuery("twill queries")
==> at http://www.google.ie/
Note: submit is using submit button: name="btnG", value="Google Search"
<a href="http://pyparsing.wikispaces.com/WhosUsingPyparsing" class="l" onmousedown="return clk(this.href,'','','res','1','','0CBMQFjAA')">pyparsing - WhosUsingPyparsing</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00048.html" class="l" onmousedown="return clk(this.href,'','','res','2','','0CBcQFjAB')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.mail-archive.com/twill@lists.idyll.org/msg00050.html" class="l" onmousedown="return clk(this.href,'','','res','3','','0CBkQFjAC')">Re: [<em>twill</em>] <em>query</em>: docs, and web site.</a>
<a href="http://www.genealogytoday.com/surname/finder.mv?Surname=Twill" class="l" onmousedown="return clk(this.href,'','','res','4','','0CB4QFjAD')"><em>Twill</em> Genealogy and Family Tree Resources - Surname Finder</a>
<a href="http://a706cheap-apparel.hobby-site.com/ladies-cotton-faded-twill-le-chameau-breeks-42" class="l" onmousedown="return clk(this.href,'','','res','5','','0CCEQFjAE')">Ladies Cotton Faded <em>Twill</em> Le Chameau Breeks 42</a>
<a href="http://twill.idyll.org/examples.html" class="l" onmousedown="return clk(this.href,'','','res','6','','0CCMQFjAF')"><em>twill</em> Examples</a>
<a href="http://panjiva.com/Sri-Lankan-Manufacturers-Of/twill+capri" class="l" onmousedown="return clk(this.href,'','','res','7','','0CCcQFjAG')">Sri-Lankan <em>Twill</em> Capri Manufacturers | Sri-Lankan Suppliers of <b>...</b></a>
<a href="http://c586cheap-apparel.dyndns.ws/twill-beige-blazer" class="l" onmousedown="return clk(this.href,'','','res','8','','0CCoQFjAH')"><em>Twill</em> beige blazer</a>
<a href="http://stackoverflow.com/questions/2267537/how-do-you-use-relative-paths-for-twill-tests" class="l" onmousedown="return clk(this.href,'','','res','9','','0CCwQFjAI')">How do you use Relative Paths for <em>Twill</em> tests? - Stack Overflow</a>
<a href="http://mytextilenotes.blogspot.com/2010/01/introduction-to-twill-weave.html" class="l" onmousedown="return clk(this.href,'','','res','10','','0CC8QFjAJ')">My Textile Notes: Introduction to <em>Twill</em> Weave</a>
>>>
io uso ubuntu in modo da uso il seguente installare BeautifulSoup e twill:
sudo apt-get install BeautifulSoup*
sudo apt-get install python-twill*
Come questo aiuta ??p>
A
Credo che invece di utilizzare la shell twill, si dovrebbe invece chiamare direttamente le funzioni utilizzando il twill python api href="http://twill.idyll.org/python-api.html" rel="nofollow noreferrer"> http://twill.idyll.org/python-api.html .
import string, re, sys, os
import twill.commands
class browser:
def __init__(self, url="www.google.com", query="python code", log = None):
self.a=twill.commands
self.a.config("readonly_controls_writeable", 1)
self.b = self.a.get_browser()
self.b.set_agent_string("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14")
self.log = log
self.b.clear_cookies()
self.url=url
self.b.go(self.url)
f = self.b.get_form("1")
# self.log.debug("form is %s" % f)
f["q"] = query
self.b.submit()
self.log.debug( "Links\n%s" % self.b.showlinks())
self.log.debug( "Forms\n%s" % self.b.showforms())
pageContent = self.b.get_html()
self.log.debug("html is <<%s>>" % pageContent)