【问题标题】:Python mechanize ignores form input in the HTMLPython mechanize 忽略 HTML 中的表单输入
【发布时间】:2010-03-06 23:08:19
【问题描述】:

得到我的小机械化代码:

br.open('http://tumblr.com/customize'); 
print br.response().read()
print br.form['edit_tumblelog[cname]'] # there definitely is edit_tumblelog
                                       # and br.form['edit_tumblelog[enable_cname]'] works fine

输出:

...
<br/>
                                    <input type="text" class="text_field" style="width:275px; min-width:0px;
                                    margin:6px 0px; border:solid 1px #d2d2d2;
                                    "
                                    name="cname" id="cname"
                                    onchange="form_changed = true;"
                                     value="blog.yay.com"    
                                    />
...
Traceback (most recent call last):
  File "/tmp/temp_textmate.W6p5gh", line 51, in <module>
    print br.form['edit_tumblelog[cname]']
  File "/Library/Python/2.6/site-packages/ClientForm-0.2.10-py2.6.egg/ClientForm.py", line 2891, in __getitem__
  File "/Library/Python/2.6/site-packages/ClientForm-0.2.10-py2.6.egg/ClientForm.py", line 3222, in find_control
  File "/Library/Python/2.6/site-packages/ClientForm-0.2.10-py2.6.egg/ClientForm.py", line 3306, in _find_control
ClientForm.ControlNotFoundError: no control matching name 'edit_tumblelog[cname]'

我做错了什么?

【问题讨论】:

  • 我不熟悉这种方括号符号来识别控件——你能提供一个 URL 记录它以便我研究它吗?我,我会使用br.select_form(name='edit_tumblelog')(假设这是表单的名称),然后使用br['cname'],但如果我能找到它的文档并使其正常工作,方括号符号似乎很有趣——谢谢!

标签: python mechanize


【解决方案1】:

发现问题。这是 Mechanize HTML 解析器中的一个错误,它会在出现 &lt;br/&gt; 后以某种方式忽略下一个标签,注意 &lt;br /&gt; 工作正常。我的解决方案是手动替换那些:

response = br.response()
response.set_data(response.get_data().replace("<br/>", "<br />")) #Python mechanize is broken, fixing it.
br.set_response(response)

显然更好的解决方案是re.sub()所有标签在/&gt;之前没有空格。

【讨论】:

  • 刚刚解决了我几乎完全不相关的问题。这个答案值得自己提出正确的问题!
【解决方案2】:

也许这对任何人都有兴趣:

br = mechanize.Browser(factory=mechanize.RobustFactory())

这应该可以解决 HTML 解析器的问题。

【讨论】:

  • 谢谢!谢谢!谢谢!你刚刚救了我。我希望我在 3 小时前找到这个!!!
猜你喜欢
  • 2018-04-21
  • 1970-01-01
  • 2017-11-27
  • 2019-01-17
  • 1970-01-01
  • 2015-10-08
  • 2017-09-14
  • 1970-01-01
  • 2015-08-12
相关资源
最近更新 更多