Mechanize在<noscript>标签</noscript>中填写textarea

时间:2011-09-19 06:49:46

标签: python mechanize

所以我有以下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中)填写textarea,但是,[[prda“]形式始终给我控制未找到错误。 StackOverflow上的另一个用户建议机械化无法解析标记内的控件,这对我来说似乎有些奇怪。

无论如何,我的问题是可以机械化解析标签内的控件,如果是,如何?此外,如果有人可以给我替代写信给textarea,我会非常乐意听到它。谢谢!

2 个答案:

答案 0 :(得分:1)

Mechanize无法识别此特定控件,因此您需要向表单添加新参数。

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

我知道你可能对此不感兴趣,但我为解决同样的问题而疯狂。

答案 1 :(得分:-2)

我稍微更改了您的HTMl(关闭“表单”标记并在文本框中添加一些内容以进行测试):

<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”,所以我想我成功选择了文本框。

非机械化版本:来自here

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