用Python mechanize模块填充文本区域
有没有办法用Python的mechanize模块来填写表单中的文本区域(textarea)?
3 个回答
1
你可以先检查一下页面上的元素,看看页面上有多少个表单。
for form in br.forms():
print form
6
你可以这样做:
import mechanize
br = mechanize.Browser()
br.open("http://pypi.python.org/pypi")
br.select_form("searchform")
br['term'] = "Mechanize"
response = br.submit()
这里的 br['term'] = "Mechanize"
是关键的一行代码。
而且你真的需要对你提问时得到的一些回答表示认可。
6
这个关于 forms
的参考资料里有几个例子,展示了如何在 response
对象中填写文本控件。
这里有一句相关的引用:
# The kind argument can also take values "multilist", "singlelist", "text",
# "clickable" and "file":
# find first control that will accept text, and scribble in it
form.set_value("rhubarb rhubarb", kind="text", nr=0)
kind
参数可以和 form.find_control()
以及 form.set_value()
方法一起使用,来找到 "text"
控件。
深入了解一下 mechanize 的 _form.py
源代码,我们可以得到一些解释。Mechanize 的 TextControl
包含了(除了其他的) TEXTAREA
表单元素。
#---------------------------------------------------
class TextControl(ScalarControl):
"""Textual input control.
Covers:
INPUT/TEXT
INPUT/PASSWORD
INPUT/HIDDEN
TEXTAREA
"""
def __init__(self, type, name, attrs, index=None):
ScalarControl.__init__(self, type, name, attrs, index)
if self.type == "hidden": self.readonly = True
if self._value is None:
self._value = ""
def is_of_kind(self, kind): return kind == "text"