所以我有以下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,我会非常乐意听到它。谢谢!
答案 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)