我刚刚开始探索TWILL。
Twill是一款令人惊叹的Web浏览脚本语言,它可以满足我的需求!
到目前为止,我一直在使用Python shell中的twill( IDLE(Python GUI)来准确),我在那里以逐个执行命令的方式做事(我的意思是,我键入一个命令,运行它,然后键入下一个命令):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 所以,我的问题是:如何将所有命令放在斜纹里面?
更新1:
(此更新是我对S.Mark的回应)
你好,S.Mark !!!我很抱歉迟到的回复。 首先,关于我的斜纹和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行,并在twill-0.9文件夹中将该文件保存为“test.twill”,这意味着该文件的完整路径文件现在是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 shell运行它,令人惊讶的是,它有效! : alt text http://roundcan.narod.ru/some_pics/31.jpg
运行之后,我查看了我的C:\ Python25文件夹,发现了新创建的result.html文件!
嗯,我在这里所做的只是使用twill命令从twill shell运行一个文件。虽然目前它正是我所需要的,但其他支持者(如下所示)建议我应该从python shell做所有事情,而不是从twill shell做的事情,这是我仍然不知道该怎么做的事情。
我的下一步是尝试在“Google App Engine”上运行类似的代码,但据我所知,只有Python被认可,而不是斜纹,这意味着如果我只知道如何做斜纹,但不是在python中,我将无法让“Google App Engine”执行我的命令。
更新2:
(2010年4月23日,星期五,凌晨3:48:15(GMT + 0.00))
(此更新是我对S.Mark的第二次回复)
似乎从命令提示符运行它也不成功: alt text http://roundcan.narod.ru/some_pics/32.jpg
答案 0 :(得分: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
然后只需将filename作为参数传递给twill-sh命令,如
python twill-sh test.twill
您可能想查看.twill示例代码tests
twill source文件夹
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
....
答案 1 :(得分: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/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>
>>>
我使用ubuntu所以我使用以下内容来安装BeautifulSoup和twill:
sudo apt-get install BeautifulSoup*
sudo apt-get install python-twill*
这有何帮助
A
答案 2 :(得分:2)
我认为不应使用斜纹外壳,而应使用twill python api http://twill.idyll.org/python-api.html直接调用函数。
答案 3 :(得分: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)