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