Wie kann ich alle Köper Befehle zusammen in ein Stück Code in einer Py-Datei?
Frage
Ich habe gerade erst begonnen zu erforschen TWILL .
Twill ist eine erstaunliche Skriptsprache für Web-Browsing und es tut alles, was ich will !!!
Bisher Ich habe Köper aus einer Python-Shell ( IDLE (Python GUI) um genau zu sein), und ich tue Dinge dort in der Art und Weise der Befehle nacheinander ausführen (ich meine, ich einen Befehl eingeben, führen sie es, dann den nächsten Befehl eingeben):
(Quelle: narod.ru )
(Quelle: narod.ru )
(Quelle: narod.ru )
(Quelle: narod.ru )
(Quelle: narod.ru )
(Quelle: narod.ru )
(Quelle: narod.ru )
Aber ich weiß nicht, wie alle diese Befehle, um gemeinsam in einer Py-Datei, so dass sie alle eines automatisch von einer ausgeführt werden.
Es scheint, dass es eine solche Möglichkeit in Twill ist. Dieses Beispiel aus der Köper Dokumentationsseite (man kann es sehen HIER ) zeigt uns ein Stück Code mehrerer Befehle aus:
(Quelle: narod.ru )
Also, meine Frage ist: Wie kann ich alle Befehle zusammen in Köper setzen?
Update 1:
(dieses Update ist meine Antwort auf St. Markus)
Hallo, St. Markus !!! Es tut mir leid für die späte Antwort. Zunächst einmal einige Informationen über die Lage meines Köper und Python Ordner:
Der Pfad, in dem python2.5 auf meinem Computer installiert ist: C: \ Python25
Der Weg zu meinem Köper-0.9 auf meinem Computer jetzt: E: \ tmp \ köper 0.9
Sagen wir, ich möchte, dass die folgenden Befehle automatisch ausgeführt werden:
go http://www.yahoo.com
save_html result.html
Dieser Code sollte yahoo Seite schauen und dann seinen HTML-Code in result.html Datei speichern. Also, versuchen, Ihre Anweisungen zu folgen, habe ich zunächst „test.txt“ Datei diesen Code enthält nur 2 Zeilen aus und gespeichert, dass die Datei als „test.twill“ in der Köper-0,9-Ordner, der t bedeutetHut der vollständige Pfad zu dieser Datei war jetzt E: \ tmp \ köper 0.9 \ test.twill
Dann habe ich versucht, den Dateinamen als Parameter übergeben Befehl Köper-sh auf viele verschiedene Arten, aber es nie funktioniert (ich must've etwas falsch getan):
(Quelle: narod.ru )
(Quelle: narod.ru )
Aber Sie wissen, was ich beschlossen, ein wenig zu experimentieren und schuf eine test.py Datei, dass auch nur diese beiden Befehle enthalten. Diese Datei, die ich auch im Köper-0,9-Ordner abgelegt (E: \ tmp \ Köper-0.9 \ test.py) und dann habe ich beschlossen, es aus Twill-Shell zu versuchen, läuft mit Köper des runfile Befehl ein, und überraschend, es funktionierte! :
(Quelle: narod.ru )
Nach dem Ausführen, sah ich meine C bis: \ Python25 Ordner und fand die neu erstellte Datei result.html dort
Nun, was ich hier getan habe, läuft einfach eine Datei aus dem Köper Shell einen Köper-Befehl. Während im Moment ist es genau das, was ich brauche und andere Anhänger (wie Sie unten sehen können) Ich schlage vor, alle Dinge aus Python-Shell tun soll, nicht aus Twill-Schale, und das ist etwas, dass ich immer noch nicht weiß, wie zu tun.
Mein nächster Schritt wird sein, zu versuchen, einen ähnlichen Code auf den „Google App Engine“, aber es, soweit ich weiß, nur Python erkannt wird, nicht Köper, was bedeutet, dass, wenn ich nur wissen, wie die Dinge zu tun, in Köper, aber nicht in python, ich werde in der Lage zu „Google App Engine“ execute meine Befehle nicht.
Update 2:
(Freitag, 23. April 2010, 03.48.15 (GMT + 0,00))
(Dieses Update ist meine zweite Antwort auf St. Markus)
Es scheint, dass es von Eingabeaufforderung entweder nicht erfolgreich ist:
(Quelle: narod.ru )
Lösung
Setzen Sie Ihre Köper Befehle in eine Datei, zum Beispiel test.twill
setlocal query "twill Python"
go http://google.com/
fv 1 q $query
submit btnI # use the "I'm feeling lucky" button
show
Und dann nur Dateinamen als Parameter übergeben Köper-sh Befehl, wie
python twill-sh test.twill
Und Sie könnten .twill Beispielcodes in tests
Ordner der Köper Quelle überprüfen möchten
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
....
Andere Tipps
Hier ist es in Aktion (ein klein wenig geändert):
>>> 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>
>>>
Ich benutze ubuntu so ich folgendes installieren BeautifulSoup verwenden und Köper:
sudo apt-get install BeautifulSoup*
sudo apt-get install python-twill*
Wie das hilft
A
ich denke, dass stattdessen die Köper Schale verwenden, sollten Sie stattdessen direkt die Funktionen aufrufen, die Köper mit Python api 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)