Mechanize 填写 <noscript> 标签中的文本区域
我有以下的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无法解析在
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'
我知道你可能不太感兴趣,但我为了搞定这个问题真是费了不少劲。