我在Ubuntu机器上运行Python 2.7.6.当我twill-sh在终端中运行(Twill是用于测试网站的浏览器)时,我得到以下内容:
Traceback (most recent call last):
File "dep.py", line 2, in <module>
import twill.commands
File "/usr/local/lib/python2.7/dist-packages/twill/__init__.py", line 52, in <module>
from shell import TwillCommandLoop
File "/usr/local/lib/python2.7/dist-packages/twill/shell.py", line 9, in <module>
from twill import commands, parse, __version__
File "/usr/local/lib/python2.7/dist-packages/twill/commands.py", line 75, in <module>
browser = TwillBrowser()
File "/usr/local/lib/python2.7/dist-packages/twill/browser.py", line 31, in __init__
from requests.packages.urllib3 import connectionpool as cpl
ImportError: No module named packages.urllib3
Run Code Online (Sandbox Code Playgroud)
但是,我可以在Python控制台中导入urllib就好了.可能是什么原因?
我想点击一个带有python的按钮,表格的信息会自动填入网页.用于向按钮发送请求的HTML代码是:
INPUT type="submit" value="Place a Bid">
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?是否可以单击urllib或urllib2按钮?或者我需要使用机械或斜纹等东西吗?
我一直在尝试在Python上学习Twill Scripting,我使用的是Python 3.4和Twill 1.8.0.在这里阅读了一些帖子,我觉得学习很有意思.但是,我确实在安装Twill时遇到了问题.我只知道Python 中的PRINT现在是一个函数,这意味着它需要括号,这就是我的问题开始的地方.当我查看Twill 1.8.0上的代码时,我认为它还没有改变使用PRINT.字符串没有括号括起来,所以我想也许有一个新的补丁或版本的Twill适应Python的变化,有没有?或者除了手动编辑斜纹文件外,我还能做些什么吗?
非常感谢您的回复.
我已经在我的计算机上成功安装了TWILL,并得到了一个非常支持的"StackOverflow"成员的帮助(你可以在这里查看)并试图在twill文档页面上运行一个简单的例子(你可以看到那个页面)在这里).这是一个例子:
alt text http://roundcan.narod.ru/some_pics/19.jpg
假设我在www.slash.org上的用户名是lynxye,我的密码是哺乳动物.当我尝试将该示例代码输入到我的Python提示符中时,我只能输入并输入代码的第一行,因为当我单击"Enter"开始一个新行时,我立即收到一些错误消息:
alt text http://roundcan.narod.ru/some_pics/20.jpg
当我尝试将此代码输入终端时,会发生同样的情况:
alt text http://roundcan.narod.ru/some_pics/21.jpg
我想我错过了一些基础知识.也许,我需要创建一个包含该代码然后以某种方式运行该文件的文件,但我真的不知道我需要在哪里创建该文件以及使用什么扩展.
有人可以帮我这个吗?
Twill作为网络自动化工具仍然具有相关性吗?如果是,那么为什么目前没有维护?如果不是,那么Mechanize是否已经进一步成熟以支持Twill风格的简单脚本?或者是否有另一个包装已经加紧填补空白?
我能够使用Twill在python中快速设置几个测试套件,但是我对如何访问Twill在我的python程序中吐出的信息感到困惑.也就是说,我可以执行showforms()并查看整齐列出的表单值,我可以使用fv更新表单值并提交.但是如何以python var的形式访问其中一个表单值?我怎么能这样说:someField1Value = fv("1","someField1")
我正在尝试使用机械化发送POST,但是我的代码有时无法正常工作(我知道为什么)。我已经使用机械化,斜纹布和要求。机械化和斜纹化处理有效,而对请求不起作用。可能是我做错了。
我的机械化代码。以下作品:
#!/usr/bin/env python
import sys
import urllib
import mechanize
from mechanize import ParseResponse, urlopen, urljoin
response = urlopen(url)
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
form["username"] = "avi"
form["password"] = "stackoverflow"
urlopen(form.click())
Run Code Online (Sandbox Code Playgroud)
我的斜纹代码。它也可以工作:
import os
import twill
from twill.commands import *
out = open(os.devnull,"w")
twill.set_output(out)
go(url)
formvalue("1", "username", "avi")
formvalue("1", "password", "stackoverflow")
submit()
go(url2) #some protected page
content = show()
print 'content is',content[:100]
Run Code Online (Sandbox Code Playgroud)
据我了解,机械化或斜纹首先获取页面,填写表格并发送表格。但是这里的问题是,有时目标页面显示随机页面,没有任何形式。在那种情况下,我会得到一个错误,显然是因为没有表格可以显示。我不想处理此错误,因为我已经知道帖子的网址。即使显示了一些随机页面,我单击下一步后,也会加载相同的表单。POST网址的所有字段均保持不变。所以我想直接发送POST请求,因为我已经知道了所需的所有细节。这是我的代码,基于:
browser = mechanize.Browser()
parameters = {"username" : "avi",
"password" : "stackoverflow",
}
data …Run Code Online (Sandbox Code Playgroud) 对不起,我已经在"超级用户"上提出了这个问题,但没有人在那里回答,所以我从"超级用户"中删除了它,并决定将其发布在这里.希望这不是一个大犯罪,特别是考虑到我第一次被建议在"StackOverflow"上使用斜纹布(不在"SuperUser"上)
我该如何开始使用斜纹布呢?我刚刚下载了它,解压缩它并点击文件夹中的setup .py文件.黑色的窗户(终端)出现了一会儿,消失了.
(我的计算机上安装了Python 2.5 - 以及来自Google App Engine的SDK)
在斜纹文档部分,它说:
下载斜纹
最新发布的twill是twill 0.9,于2007年12月27日星期四发布; 它可以从http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz下载 .您还可以使用Python的easy_install来安装或升级twill.
twill适用于Python 2.3或更高版本.
要开始使用斜纹,请安装它,然后键入twill-sh.在提示符下键入:
go http://www.slashdot.org/
show
showforms
showhistory
我从这段文字中不清楚我应该键入什么(只有"twill-sh"或"twill-sh"以及该行下的所有单词)以及在哪里(我尝试在计算机的命令提示符窗口中键入它 - 无济于事)
可以,有人,请帮帮我吗?
先感谢您.
更新1:
(此更新是对S.Mark给出的答案的回应)
你好,S.Mark !!!! 我试图按照你的指示.这是发生了什么:
首先,我在D盘上创建了一个文件夹,并将其命名为"tmp".然后我下载并将twill-0.9提取到该文件夹中.所以,现在我的计算机上此文件的路径与您的示例中的路径相同:D:\ tmp\twill-0.9: alt text http://roundcan.narod.ru/some_pics/01_path_big.jpg
alt text http://roundcan.narod.ru/some_pics/02_path_small.jpg
然后,我尝试在我的计算机上打开命令提示符: alt text http://roundcan.narod.ru/some_pics/03_window.jpg
alt text http://roundcan.narod.ru/some_pics/04_prompt_big.jpg
alt text http://roundcan.narod.ru/some_pics/05_prompt_small.jpg
alt text http://roundcan.narod.ru/some_pics/06_admin.jpg
alt text http://roundcan.narod.ru/some_pics/07_admin_big.jpg
然后,按照您的说明的第2步,我尝试切换到D盘:
alt text http://roundcan.narod.ru/some_pics/08_switch_try.jpg
但由于某种原因,它不起作用:
alt text http://roundcan.narod.ru/some_pics/09_switch_result.jpg
这条中文行说的是"这个行为被拒绝了."为什么会这样?好吧,无论如何我试着继续进行第3步,这就是我所拥有的:
alt text http://roundcan.narod.ru/some_pics/10_third_step.jpg
据我所知,这条中文行说"C:\"既不是内部命令也不是外部命令,因此无法执行."为什么会这样?我的电脑有问题吗?
更新2:
(此更新是我对S.Mark给出的答案的第二次回复)
你好,S.Mark !!! 再次感谢您的回答.
是的,这一次,当我输入您在帖子中突出显示的那些部分时它起作用了.所以,当我在一开始只输入"d:"时就可以了! …
我试图从网站上提取信息,这样做需要我登录.一切顺利,直到我到达提交按钮:
MissingSchema: Invalid URL u'/index.php?r=site/login': No schema supplied.
Perhaps you meant http:///index.php?r=site/login?
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这种情况正在发生,因为网站将自身重定向到服务器上的页面.有没有办法让按钮重定向到整页而不是服务器上的本地文件?或者我甚至纠正为什么会出现这个错误?
提前致谢
我的守则的要点:
from twill.commands import *
go('panel.picklehosting.com/index.php?r=site/login')
showforms()
formclear('1')
fv("1", "name", "usrname")
fv("1", "password", "mypass")
submit()
Run Code Online (Sandbox Code Playgroud)