用Python mechanize模块填充文本区域

5 投票
3 回答
6038 浏览
提问于 2025-04-15 22:59

有没有办法用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"

撰写回答