python - 如何使用 Robobrowser 提交带有获取操作的表单

标签 python forms robobrowser

我正在使用 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

您的示例代码实际上没有设置表单字段的值,而是用 unicode 对象替换了字段。运行 form['ln'] = name 不会将 ln 字段的值设置为 name;它删除 ln 字段并将其替换为name 字符串。然后,当表单尝试序列化其内容时,它会尝试调用其每个字段的 serialize 方法。但是字符串没有定义那个方法,这导致了你遇到的回溯。

关于python - 如何使用 Robobrowser 提交带有获取操作的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067874/

相关文章:

python - RoboBrowser 表单提交

python - 导入 cookie - Robobrowser - Python

python - 数学表达式作为函数的参数?

c# - C# Graphics 对象的 Java 等价物是什么? (包括更多详细信息)

javascript - Material UI 多选中的可删除芯片

javascript - 表单未正确验证

python - 通过 Python 登录网站 - 如何应对 CSRF?

Python 交替引用新实例

python - E1101 :Module 'turtle' has no 'forward' member

python - 如何在每行的开头添加字符串?