mecanizar Python pierde atributos en segundo abierta
Pregunta
Este es un caso muy especializado y me siento incómodo pidiéndole; Sin embargo estoy en el extremo de los ingenios a trabajar en él.
Tengo que seguir un número de seguimiento a través de un formulario y una página de resultados, así que he estado usando mecanizar en Python, el enlace después de la presentación forma se incrusta en javascript así que no puedo simplemente follow_link. Lo que quiero hacer es regex a cabo la url y luego pedir a llamar open()
en la que, sin embargo cuando lo haga -. Me encuentro con algunos problemas
Puedo llamar br.geturl()
y br.title()
muy bien en la página de destino, pero cuando llega el momento de leer la fuente de la página en cuestión, que arroja
AttributeError: mechanize._mechanize.Browser instance has no attribute read (perhaps you forgot to .select_form()?)
¿Hay alguna manera de hacer esto o estoy mono-parcheo demasiado, cualquier consejo sería excelente
editar [más código {realmente feo tratando de conseguir que funcione}]:
cosn="########"
baseurl="http://aaa.com/"
search="thing.do"
br=Browser()
br.open(baseurl+search)
br.select_form('traceForm')
br['consignments']=cosn
req=br.submit()
pars=Soup(req.read())
found_url=re.match(r"javascript:window.location.href = '(?P<url>[\w\d=&?\.]+)", pars.find('td', attrs={'class':'select'})['onclick']).group('url')
br.open(baseurl+found_url)
print br.title() # works
print br.geturl() # works
print br.read() # throws exception
Solución
Nunca se hace primero .read
llamada a un método de instancia del navegador. Esto se debe a que no tiene tal método. El método tiene Browswer.response
read
, así que si usted desea conseguir el cuerpo de la respuesta que había necesidad de hacer:
response = br.response()
response.read()
En el futuro, se podría utilizar dir(obj)
para ver el contenido de la obj
objeto, ya sea el navegador o cualquier otra cosa.