Frage

Ich benutze die Robobrowser-Bibliothek, ich bin auf ein Formular gestoßen:

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

Mein Code:

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

Ich erhalte die folgende Fehlermeldung und Rückverfolgung:

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'

Kann dieses Formular mit robobrowser eingereicht werden?

War es hilfreich?

Lösung

Das Problem ist die Art und Weise, wie Sie die Werte der Formularfelder festlegen.Um den Wert eines Feldes zu ändern, schreiben Sie in dessen Feld value Attribut:

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

Anstatt die Werte der Formularfelder festzulegen, ersetzt Ihr Beispielcode die Felder tatsächlich durch Unicode-Objekte.Laufen form['ln'] = name legt den Wert des nicht fest ln feld bis name;es löschen der ln feld und ersetzt es durch die name Zeichenfolge.Wenn das Formular dann versucht, seinen Inhalt zu serialisieren, versucht es, das aufzurufen serialize methode jedes seiner Felder.Zeichenfolgen definieren diese Methode jedoch nicht, was zu dem Traceback führt, auf das Sie gestoßen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top