2010-03-06 4 views
1

내 작은 기계화 코드를 얻었다되는 HTML의 폼 입력을 무시합니다 :파이썬 기계화는

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

을 뭐하는 거지?

+1

컨트롤을 식별하는이 대괄호 표기법에 익숙하지 않습니다. 문서화 할 수 있도록 URL을 문서로 제공 할 수 있습니까? 필자는'br.select_form (name = 'edit_tumblelog')'(폼의 이름이라고 가정)을 사용하고'br [ 'cname']'을 사용했지만, 문서를 찾을 수 있다면 대괄호 표기법이 흥미롭게 보입니다 그것을 위해 그것을 제대로 작동하게 - 감사합니다! –

답변

8

발견. 이것은 Mechanize HTML 파서의 버그로, <br/>의 발생 후 다음 태그를 무시하면 <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() 모든 태그이다.

+0

그냥 거의 관련없는 내 문제를 해결했습니다. 이 답변은 적절한 질문을받을 자격이 있습니다! – Penz

6

아마이 사람에 대한 관심이다

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

이것은 HTML 파서와 함께 문제를 해결해야한다.

+0

감사합니다! 고맙습니다! 고맙습니다! 방금 날 구해 줬어. 나는 이것을 3 시간 전에 찾았 으면 좋겠다 !!! –

+0

당신은 반갑습니다. :) 도와 줘서 다행입니다. – Julian

+0

이것은 이상하게 작동했습니다! – afreeland