문제

Robobrowser 라이브러리를 사용하고 있습니다.

<form action="/results" id="search">
            <div class="s_ctr">
                <fieldset>
                    <label class="jaw" for="ln">Search by Name</label><input type="text" placeholder="Search by Name" autocomplete="off" value="" tabindex="1" name="ln" maxlength="255" class="name" id="ln" data-key="true"><span>near</span><label class="jaw" for="loc">Enter City, State</label><input type="text" placeholder="Enter City, State" autocomplete="off" value="" tabindex="2" name="loc" maxlength="255" class="location" id="loc" data-key="true">
                </fieldset>
                <input type="submit" value="Find Physician" class="orange-btn" tabindex="4" id="btn-submit">

            </div>
        </form>
.

내 코드 :

search_form = browser.get_form(id='search')
search_form        
search_form.fields['1']= name
search_form.fields['2']= address
# # Submit the form
browser.submit_form(search_form)
browser
.

다음과 같은 오류 및 추적 :

Traceback:
File "C:\r1\lib\site-packages\django\core\handlers\base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\r1\lib\site-packages\django\views\decorators\csrf.py" in wrapped_view
  57.         return view_func(*args, **kwargs)
File "C:\r1\mlist\ml1\views.py" in ph
  48.             p = getPhone(A.name,A.address)
File "C:\r1\mlist\ml1\views.py" in getPhone
  191.     browser.submit_form(search_form)
File "C:\r1\lib\site-packages\robobrowser\browser.py" in submit_form
  343.         payload = form.serialize(submit=submit)
File "C:\r1\lib\site-packages\robobrowser\forms\form.py" in serialize
  225.         return Payload.from_fields(include_fields)
File "C:\r1\lib\site-packages\robobrowser\forms\form.py" in from_fields
  118.             payload.add(field.serialize(), field.payload_key)    

Exception Type: AttributeError at /ph/
Exception Value: 'unicode' object has no attribute 'serialize'
.

이 양식은 Robobrowser와 함께 제출할 수 있습니까?

도움이 되었습니까?

해결책

문제는 양식 필드의 값을 설정하는 방식입니다.필드의 값을 변경하려면 value 속성에 씁니다.

form.fields['ln'].value = name
# Or, as a shortcut...
form['ln'].value = name
.

양식 필드의 값을 설정하는 대신 예제 코드는 실제로 필드를 유니 코드 객체로 실제로 바꿉니다.form['ln'] = name를 실행하는 것은 ln 필드의 값을 name로 설정하지 않습니다. ln 필드를 삭제하고 name 문자열로 바꿉니다.그런 다음 양식이 내용을 직렬화하려고 시도하면 각 필드의 serialize 메소드를 호출하려고 시도합니다.그러나 문자열은 당신이 겪었던 추적을 이끌어가는 그 방법을 정의하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top