Mechanize 填写 <noscript> 标签中的文本区域

1 投票
2 回答
1039 浏览
提问于 2025-04-17 02:34

我有以下的HTML代码:

<form action="blabla" blabla >
<input 1 type=blah>
<input 2 type=blah2> etc
<noscript>
    <textarea name="prda" rows="3" cols="40"></textarea>
</noscript>

我想用Python中的mechanize来填写那个文本区域,但每次我尝试用form["prda"]时,总是出现“找不到控件”的错误。另一个用户在StackOverflow上提到,mechanize无法解析在

标签内的控件,这让我觉得有点奇怪。

总之,我想问的是,mechanize能否解析

标签内的控件,如果可以的话,应该怎么做?另外,如果有人能告诉我其他方法来写入文本区域,我会非常感激。谢谢!

2 个回答

-2

我稍微修改了一下你的HTML(关闭了“form”标签,并在文本框中添加了一些内容以便测试):

<form action="blabla" blabla > <input 1 type=blah> <input 2 type=blah2> <noscript> <textarea name="prda" rows="3" cols="40">Foobar</textarea> </noscript> </form>

好了,接下来是机械化版本:

from mechanize import ParseResponse, urlopen

response = urlopen("http://localhost:8000/test")
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print form["prda"]

这段代码输出了“Foobar”,所以我想我成功地选择了文本框。

非机械化版本:来自 这里

from lxml.html import fromstring, tostring
form_page = fromstring(html_code)
form = form_page.forms[0]
form.fields = dict(
    prda='input',
    )
print tostring(form)
1

Mechanize这个工具无法识别这个特定的控件,所以你需要在你的表单中添加一个新的参数。

br.form.new_control('text','prda',{'value':''})
br.form.fixup()
br.form['prda'] = 'input'

我知道你可能不太感兴趣,但我为了搞定这个问题真是费了不少劲。

撰写回答