python 机械化制动 TextareaControl 的内容
python mechanize brakes the content of TextareaControl
我想在 [OSQA > 用户设置] 的管理面板中更改一个复选框,但是当我使用 mechanize 提交 Web 表单时,它会用额外的字符粉碎 TextareaControl 的内容。
>>> import mechanize
>>> mech = mechanize.Browser()
>>> mech.open('http://example.com/account/signin/')
>>> mech.select_form(nr=2)
>>> mech["username"] = 'user'
>>> mech["password"] = 'pass'
>>> mech.open('http://example.com/admin/settings/users/')
>>> for el in mech.forms():
... print el
...
<POST http://example.com/admin/settings/users/ multipart/form-data
<HiddenControl(csrfmiddlewaretoken=XxWchtzV5oR6ezkObhnk4nzIemTc8aDC) (readonly)>
<TextControl(MIN_USERNAME_LENGTH=3)>
<TextareaControl(RESERVED_USERNAMES=testing, this)> # << HERE
<CheckboxControl(TRUNCATE_LONG_USERNAMES=[*on])>
<CheckboxControl(SHOW_USER_ACCEPT_RATE=[*on])>
<TextControl(FREEZE_ACCEPT_RATE_FOR=admin)>
<SubmitControl(submit=Save) (readonly)>>
>>> mech.select_form(nr=0)
>>> print mech["RESERVED_USERNAMES"]
... testing, this
所以当我现在提交它时甚至没有修改任何字段...
>>> results = mech.submit()
...TextareaControl的内容变为:
>>> mech.open('http://example.com/admin/settings/users/')
>>> mech.select_form(nr=0)
>>> print mech["RESERVED_USERNAMES"]
... t, ,, , e, ,, , s, ,, , t, ,, , i, ,, , n, ,, , g, ,, , ,, ,, , , ,, , t, ,, , h, ,, , i, ,, , s
正在尝试调试机械化但没有成功。
我最终在 osqa/forum/settings/users.py
安装前通过更改 OSQA 设置选中了这些复选框
REQUIRE_EMAIL_VALIDATION_TO = Setting('REQUIRE_EMAIL_VALIDATION_TO', [], USERS_SET, dict(
label = _("Require email validation to..."),
help_text = _("Which actions in this site, users without a valid email will be prevented from doing."),
widget=CheckboxSelectMultiple(attrs={"checked":"checked"}),
choices=(("ask", _("ask questions")), ("answer", _("provide answers")), ("comment", _("make comments")), ("flag", _("report posts"))),
required=False,
))
已添加 (attrs={"checked":"checked"})
,这不是我要解决的问题,但解决了我的问题。
我想在 [OSQA > 用户设置] 的管理面板中更改一个复选框,但是当我使用 mechanize 提交 Web 表单时,它会用额外的字符粉碎 TextareaControl 的内容。
>>> import mechanize
>>> mech = mechanize.Browser()
>>> mech.open('http://example.com/account/signin/')
>>> mech.select_form(nr=2)
>>> mech["username"] = 'user'
>>> mech["password"] = 'pass'
>>> mech.open('http://example.com/admin/settings/users/')
>>> for el in mech.forms():
... print el
...
<POST http://example.com/admin/settings/users/ multipart/form-data
<HiddenControl(csrfmiddlewaretoken=XxWchtzV5oR6ezkObhnk4nzIemTc8aDC) (readonly)>
<TextControl(MIN_USERNAME_LENGTH=3)>
<TextareaControl(RESERVED_USERNAMES=testing, this)> # << HERE
<CheckboxControl(TRUNCATE_LONG_USERNAMES=[*on])>
<CheckboxControl(SHOW_USER_ACCEPT_RATE=[*on])>
<TextControl(FREEZE_ACCEPT_RATE_FOR=admin)>
<SubmitControl(submit=Save) (readonly)>>
>>> mech.select_form(nr=0)
>>> print mech["RESERVED_USERNAMES"]
... testing, this
所以当我现在提交它时甚至没有修改任何字段...
>>> results = mech.submit()
...TextareaControl的内容变为:
>>> mech.open('http://example.com/admin/settings/users/')
>>> mech.select_form(nr=0)
>>> print mech["RESERVED_USERNAMES"]
... t, ,, , e, ,, , s, ,, , t, ,, , i, ,, , n, ,, , g, ,, , ,, ,, , , ,, , t, ,, , h, ,, , i, ,, , s
正在尝试调试机械化但没有成功。
我最终在 osqa/forum/settings/users.py
REQUIRE_EMAIL_VALIDATION_TO = Setting('REQUIRE_EMAIL_VALIDATION_TO', [], USERS_SET, dict(
label = _("Require email validation to..."),
help_text = _("Which actions in this site, users without a valid email will be prevented from doing."),
widget=CheckboxSelectMultiple(attrs={"checked":"checked"}),
choices=(("ask", _("ask questions")), ("answer", _("provide answers")), ("comment", _("make comments")), ("flag", _("report posts"))),
required=False,
))
已添加 (attrs={"checked":"checked"})
,这不是我要解决的问题,但解决了我的问题。