2010-04-22 5 views
1

Я только что начал изучать TWILL.Как я могу скомпоновать все команды twill в один кусок кода в файле .py?

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

До сих пор я использую саржу из оболочки Python (IDLE (GUI Python) быть точными), и я делаю то есть на пути выполнения команд по одному (я имею в виду, я печатаю одну команды , запустить его, а затем введите следующую команду): alt text http://roundcan.narod.ru/some_pics/22.jpg alt text http://roundcan.narod.ru/some_pics/23.jpg alt text http://roundcan.narod.ru/some_pics/24.jpg alt text http://roundcan.narod.ru/some_pics/25.jpg alt text http://roundcan.narod.ru/some_pics/26.jpg alt text http://roundcan.narod.ru/some_pics/27.jpg alt text http://roundcan.narod.ru/some_pics/28.jpg Но я не знаю, как поставить все эти команды в одном .py файла, так что все они будут выполняются один за другим автоматически.

Кажется, что есть такая возможность в сарже. Этот пример из страницы документации twill (вы можете видеть ее HERE) показывает нам один фрагмент кода, состоящий из нескольких команд: alt text http://roundcan.narod.ru/some_pics/19.jpg Итак, мой вопрос: как я могу скомпоновать все команды в twill?


Update 1:

(это обновление мой ответ S.Mark)

Здравствуйте, S.Mark !!! Прошу прощения за поздний ответ. Прежде всего, некоторая информация о местоположении моих саржевых и папок, связанные с Python:

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

Путь к моему саржевому-0,9 на мой компьютер Сейчас: E: \ TMP \ саржа-0,9

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

go http://www.yahoo.com 

save_html result.html 

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

Затем я попытался передать имя файла в качестве параметра команде twill-sh разными способами, но он никогда не работал (я, должно быть, был что-то не так): alt text http://roundcan.narod.ru/some_pics/29.jpg alt text http://roundcan.narod.ru/some_pics/30.jpg Но вы знаете, что я решил немного поэкспериментировать и создал файл test.py, который также содержал только эти две команды. Этот файл я также поместил в папку twill-0.9 (E: \ tmp \ twill-0.9 \ test.py), а затем решил попробовать запустить его из оболочки twill, используя команду runfile команды twill, и, что удивительно, это сработало! : alt text http://roundcan.narod.ru/some_pics/31.jpg

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

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

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


Update 2:

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

(Это обновление мой второй ответ на S.Mark)

кажется, что запустить его из командной строки не удается либо: alt text http://roundcan.narod.ru/some_pics/32.jpg

+1

Вы можете загрузить файл .twill из twill-sh, взгляните на мой ответ. – YOU

+1

@brilliant, для обновления 1 вам нужно запустить 'python twill-sh test.twill' из командной строки, а не оболочку python – YOU

+1

@brilliant, относительно обновления 2, выглядит как добавление' C: \ Python25; 'в переменную среды PATH не удалось (я прокомментировал, как установить это по вашему предыдущему вопросу [здесь] (http://stackoverflow.com/questions/2651334/how-can-i-start-using-twill#comment-2694009)), но в любом случае, существует более быстрый способ, переименовать или скопировать 'twill-sh' в' twill-sh.py', а затем запустить командную строку 'twill-sh.py test.twill'. дайте мне знать, если возникнут проблемы – YOU

ответ

3

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

setlocal query "twill Python" 

go http://google.com/ 

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

show 

А затем просто передать имя файла в качестве параметра для саржа-ш, как

python twill-sh test.twill 

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

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

Здравствуйте, S.Mark !!! Я пробовал свой путь, и что-то там не получилось, но снова метод проб и ошибок был помог. См. Раздел «Обновление 1» выше. Спасибо за ваше время. – brilliant

+0

@ S.Mark: «для обновления 1 вам нужно запустить python twill-sh test.twill из командной строки» - Я пропустил что-то важное там? Он просто не хочет проходить через командную строку. Пожалуйста, взгляните на снимок экрана «Обновление 2». Спасибо. – brilliant

+0

@ S.Марк: «относительно обновления 2, похоже, добавление C: \ Python25; переменной окружения PATH не удалось» - Ой! Я так сожалею! Это моя ошибка - я перешел на другой компьютер и не рассказал вам об этом. Я думал, что информировать вас о смене пути к моей папке «twill-0.9» было достаточно; и я полностью забыл об этой необходимости изменить переменную окружения «Путь»! Да, я просто попробовал как ваш быстрый метод (twill-sh.py), так и более длинный (python twill-sh, с редактированием «Путь») - они оба работают !!! Интересно, что если я сделаю это одним из – brilliant

2

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

+0

Спасибо, Никвин. Я думаю, что вы правы - мне действительно нужно научиться ho делать это из оболочки python. – brilliant

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, за предоставление этого кода. Но я почти ничего не понимаю. Я займу некоторое время, чтобы изучить его. – brilliant

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 и саржа:

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

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

A

+0

Спасибо, amadain, за этот ввод. (Вы бывший пользователь323303?). Итак, значит ли мне сначала загрузить и установить «Красивое мыло»? – brilliant

+1

well beautifulsoup идет рука об руку с селеном и саржа. Это очень удобно для разбора страниц, как только вы попадаете на страницу, которую ищете. Вам не нужно его загружать, но я бы рекомендовал использовать его, если вы планируете использовать twill или selenium много – amadain

+1

и да, я бывший пользователь323303 – amadain