1

私の小さな機械化コードを手に入れました:

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]'

私は何を間違っていますか?

4

2 に答える 2

8

問題が見つかりました。<br/>これは、Mechanize HTMLパーサーのバグであり、正常に機能するメモが発生した後、どういうわけか次のタグを無視し<br />ます。私の解決策は、それらを手動で置き換えることでした:

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

明らかに、より良い解決策は、re.sub()前にスペースを入れずにすべてのタグを作成すること/>です。

于 2010-03-07T00:45:16.863 に答える
6

たぶん、これは誰にとっても興味深いものです:

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

これにより、HTML パーサーの問題が解決されます。

于 2011-09-14T18:01:02.047 に答える