tutorial python forms mechanize

python - tutorial - mecanizar seleccionar formulario usando id



mechanize python 3 (7)

Encontré esto como una solución para el mismo problema. br es el objeto mecanizar

formcount=0 for frm in br.forms(): if str(frm.attrs["id"])=="sblock": break formcount=formcount+1 br.select_form(nr=formcount)

Estoy seguro de que el método de contador de bucle anterior podría hacerse más de forma pirónica, pero esto debería seleccionar el formulario con el atributo id="sblock" .

Estoy trabajando en mecanizar con python.

<form action="/monthly-reports" accept-charset="UTF-8" method="post" id="sblock">

El formulario aquí no tiene nombre. ¿Cómo puedo analizar el formulario utilizando su id ?


Intente usar: br.select_form(nr=0) , donde nr es el número del formulario (no necesita el nombre ni el ID).


Mejorando un poco el ejemplo de python412524, la documentación indica que esto también es válido, y lo encuentro un poco más limpio:

for form in br.forms(): if form.attrs[''id''] == ''sblock'': br.form = form break


Para cualquier futuro espectador, aquí hay otra versión que usa el argumento del predicate . Tenga en cuenta que esto se puede hacer en una sola línea con un lambda, si así lo desea:

def is_sblock_form(form): return "id" in form.attrs and form.attrs[''id''] == "sblock" br.select_form(predicate=is_sblock_form)

Fuente: https://github.com/jjlee/mechanize/blob/master/mechanize/_mechanize.py#L462


Puede usar el parámetro de predicado de la función select_form de la clase del navegador. Me gusta esto:

from mechanize import Browser, FormNotFoundError try: br.select_form(predicate=lambda frm: ''id'' in frm.attrs and frm.attrs[''id''] == ''sblock'') except FormNotFoundError: print("ERROR: Form not Found")


prueba con

[f.id for f in br.forms()]

Debe devolver una lista de todos los identificadores de formulario de su página.


g_form_id = "" def is_form_found(form1): return "id" in form1.attrs and form1.attrs[''id''] == g_form_id def select_form_with_id_using_br(br1, id1): global g_form_id g_form_id = id1 try: br1.select_form(predicate=is_form_found) except mechanize.FormNotFoundError: print "form not found, id: " + g_form_id exit() # ... goto the form page, using br = mechanize.Browser() # now lets select a form with id "user-register-form", and print its contents select_form_with_id_using_br(br, "user-register-form") print br.form # that''s it, it works! upvote me if u like