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: alt text
(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): alt text
(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! : alt text
(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: alt text
(Quelle: narod.ru )

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top