Как я могу собрать все команды twill вместе в один кусок кода в файле .py?

1

Я только начал изучать TWILL.

Twill - удивительный язык сценариев для просмотра веб-страниц, и он делает все, что я хочу !!!

До сих пор я использовал twill из оболочки Python (точнее, IDLE (Python GUI)), и я делаю там что-то, выполняя команды одну за другой (я имею в виду, я набираю одну команду, запускаю ее, затем набираю следующая команда): Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Но я не знаю, как собрать все эти команды в один файл .py, чтобы все они выполнялись одна за другой автоматически.

Кажется, в твилле такая возможность есть. Этот пример со страницы документации Twill (вы можете увидеть его ЗДЕСЬ) показывает нам один кусок кода, состоящий из нескольких команд: Изображение 174551
(источник: narod.ru)

Итак, мой вопрос: как я могу сложить все команды вместе?


Обновление 1:

(это обновление - мой ответ С. Марку)

Привет, С.Марк !!! Прошу прощения за поздний ответ. Прежде всего, немного информации о расположении моих папок, связанных с twill и python:

Путь, где Python2.5 установлен на моем компьютере: C:\Python25

Путь к моему twill-0.9 на моем компьютере сейчас: E:\tmp\twill-0.9

Допустим, я хочу, чтобы следующие команды выполнялись автоматически:

go http://www.yahoo.com

save_html result.html

Этот код должен просмотреть страницу Yahoo, а затем сохранить ее HTML-код в файле result.html. Итак, пытаясь следовать Вашим инструкциям, я сначала создал файл "test.txt", содержащий этот код, состоящий всего из 2 строк, и сохранил этот файл как "test.twill" в папке twill-0.9, что означает, что полный путь к этому файл теперь был E:\tmp\twill-0.9\test.twill

Затем я попытался передать имя файла как параметр команде twill-sh разными способами, но это не сработало (я, должно быть, делал что-то не так): Изображение 174551
(источник: narod.ru)

Изображение 174551
(источник: narod.ru)

Но знаете, я решил немного поэкспериментировать и создал файл test.py, который также содержал только эти две команды. Этот файл я также поместил в папку twill-0.9 (E:\tmp\twill-0.9\test.py), а затем решил попробовать запустить его из оболочки twill с помощью команды runfile twills, и, что удивительно, это сработало! : Изображение 174551
(источник: narod.ru)

После запуска я посмотрел папку C:\Python25 и нашел там только что созданный файл result.html!

Итак, я просто запустил файл из оболочки twill с помощью команды twill. Хотя на данный момент это именно то, что мне нужно, другие сторонники (как вы можете видеть ниже) предлагают мне делать все из оболочки Python, а не из оболочки Twill, и я до сих пор не знаю, как это сделать.

Следующим моим шагом будет попытка запустить подобный код в "Google App Engine", но там, насколько я знаю, распознается только Python, а не твил, что означает, что если я знаю, как делать вещи в твилле, но не в python, я не смогу, чтобы "Google App Engine" выполнял мои команды.


Обновление 2:

(Пятница, 23 апреля 2010 г., 3:48:15 (GMT + 0,00))

(Это обновление - мой второй ответ С. Марку)

Похоже, что запуск из командной строки также не удался: Изображение 174551
(источник: narod.ru)

  • 1
    Вы можете загрузить файл .twill из twill-sh, посмотрите на мой ответ.
  • 1
    @brilliant, для обновления 1 вам нужно запустить python twill-sh test.twill из командной строки, а не оболочки Python
Показать ещё 1 комментарий
Теги:
command
twill

4 ответа

3
Лучший ответ

Поместите свои команды twill в файл, например test.twill

setlocal query "twill Python"

go http://google.com/

fv 1 q $query
submit btnI     # use the "I'm feeling lucky" button

show

И затем просто передайте имя файла как параметр в команду twill-sh, например

python twill-sh test.twill

И вы можете проверить .twill образцы кода в папке tests источника twill

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
....
  • 0
    Привет, С.Марк !!! Я попробовал Твой путь, и что-то там не сработало, но опять-таки метод проб и ошибок помог. Пожалуйста, обратитесь к разделу «Обновление 1» выше. Спасибо за уделенное время.
  • 0
    @ S.Mark: «для обновления 1 вам нужно запустить python twill-sh test.twill из командной строки» - я что-то там пропустил? Он просто не хочет проходить через командную строку. Пожалуйста, взгляните на скриншот в «Обновлении 2». Благодарю вас.
Показать ещё 6 комментариев
3

Здесь он находится в действии (изменился бит):

>>> 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/[email protected]/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/[email protected]/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>
>>>  

Я использую ubuntu, поэтому для установки BeautifulSoup и twill используется следующее:

sudo apt-get install BeautifulSoup*  
sudo apt-get install python-twill*

Как это помогает

A

  • 0
    Спасибо, amadain, за этот вклад. (Вы бывший пользователь 323303?). Так значит ли это, что мне нужно сначала скачать и установить «Beautiful Soap»?
  • 1
    Хорошо, Beautifulsoup идет рука об руку с селеном и твиллом. Это очень удобно для анализа страниц, как только вы попадаете на страницу, которую вы ищете. Вам не нужно загружать его, но я бы порекомендовал использовать его, если вы планируете много использовать саржевого или селенового
Показать ещё 4 комментария
2

Я думаю, что вместо использования оболочки twill вы должны прямо вызывать функции с помощью twill python api http://twill.idyll.org/python-api.html.

  • 0
    Спасибо, Никвин. Я думаю, что вы правы - мне действительно нужно научиться делать это из оболочки Python.
1
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)
  • 0
    Спасибо, user323303, за предоставление этого кода. Но я вряд ли что-то понимаю в этом. Я найду некоторое время, чтобы изучить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню