Question

J'utilise la bibliothèque robobrowser, je suis tombé sur un formulaire :

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

Mon 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

J'obtiens l'erreur et le traçage suivants :

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'

Ce formulaire peut-il être soumis avec RoboBrowser ?

Était-ce utile?

La solution

Le problème réside dans la façon dont vous définissez les valeurs des champs du formulaire.Pour modifier la valeur d'un champ, écrivez dans son value attribut:

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

Au lieu de définir les valeurs des champs du formulaire, votre exemple de code remplace les champs par des objets Unicode.En cours d'exécution form['ln'] = name ne définit pas la valeur du ln champ à name;il supprime le ln champ et le remplace par le name chaîne.Ensuite, lorsque le formulaire tente de sérialiser son contenu, il tente d'appeler le serialize méthode de chacun de ses champs.Mais les chaînes ne définissent pas cette méthode, ce qui conduit au traçage que vous avez rencontré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top