Estoy tratando de publicar una solicitud para iniciar sesión en un sitio web utilizando el módulo Solicitudes en Python, pero en realidad no funciona. Soy nuevo en esto ... así que no puedo averiguar si debo hacer mis cookies de nombre de usuario y contraseña o algún tipo de autorización HTTP que encontré (??).
from pyquery import PyQuery
import requests
url = 'http://www.locationary.com/home/index2.jsp'
Entonces, creo que se supone que debo usar "publicación" y cookies ...
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
r = requests.post(url, cookies=ck)
content = r.text
q = PyQuery(content)
title = q("title").text()
print title
Tengo la sensación de que estoy haciendo mal las galletas ... No lo sé.
Si no inicia sesión correctamente, el título de la página de inicio debería aparecer como "Locationary.com" y si lo hace, debería ser "Página de inicio".
Si pudiera explicarme algunas cosas sobre las solicitudes y las cookies y ayudarme con esto, se lo agradecería enormemente. :RE
Gracias.
... Todavía no funcionaba realmente. Bien ... esto es lo que dice el HTML de la página de inicio antes de iniciar sesión:
</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td>
Creo que lo estoy haciendo bien, pero el resultado sigue siendo "Locationary.com".
2da EDICIÓN:
Quiero poder permanecer conectado durante mucho tiempo y cada vez que solicito una página bajo ese dominio, quiero que el contenido se muestre como si estuviera conectado.
fuente
Sé que ha encontrado otra solución, pero para aquellos como yo que encuentran esta pregunta, buscando lo mismo, se puede lograr con solicitudes de la siguiente manera:
En primer lugar, como hizo Marcus, verifique la fuente del formulario de inicio de sesión para obtener tres datos: la URL en la que se publica el formulario y los atributos de nombre de los campos de nombre de usuario y contraseña. En su ejemplo, son inUserName e inUserPass.
Una vez que lo tenga, puede usar un
requests.Session()
instancia para realizar una solicitud de publicación a la URL de inicio de sesión con sus datos de inicio de sesión como carga útil. Hacer solicitudes desde una instancia de sesión es esencialmente lo mismo que usar solicitudes normalmente, simplemente agrega persistencia, lo que le permite almacenar y usar cookies, etc.Suponiendo que su intento de inicio de sesión fue exitoso, simplemente puede usar la instancia de sesión para realizar más solicitudes al sitio. La cookie que lo identifica se utilizará para autorizar las solicitudes.
Ejemplo
fuente
p = s.post('LOGIN_URL.....
y luegop.text
Permítanme intentar hacerlo simple, supongamos que la URL del sitio es http://example.com/ y supongamos que necesita registrarse completando el nombre de usuario y la contraseña, por lo que vamos a la página de inicio de sesión, digamos http: // ejemplo. com / login.php ahora y vea su código fuente y busque la URL de acción, estará en la etiqueta de formulario algo como
ahora tome userinfo.php para hacer una URL absoluta que será ' http://example.com/userinfo.php ', ahora ejecute un script de Python simple
Espero que esto ayude a alguien en algún lugar algún día.
fuente
webbrowser
móduloprint r.content
es equivocado que debe utilizarprint(r.content)
Descubra el nombre de las entradas utilizadas en el formulario de sitios web para nombres de usuario
<...name=username.../>
y contraseñas<...name=password../>
y reemplácelas en el siguiente script. También reemplace la URL para que apunte al sitio deseado para iniciar sesión.login.py
El uso de
disable_warnings(InsecureRequestWarning)
silenciará cualquier salida del script cuando intente iniciar sesión en sitios con certificados SSL no verificados.Extra:
Para ejecutar este script desde la línea de comandos en un sistema basado en UNIX, colóquelo en un directorio, es decir,
home/scripts
agregue este directorio a su ruta en~/.bash_profile
o un archivo similar utilizado por la terminal.Luego crea un enlace a este script de Python dentro
home/scripts/login.py
Cierra tu terminal, inicia una nueva, ejecuta
login
fuente
los
requests.Session()
solución ayudó a iniciar sesión en un formulario con CSRF Protection (como se usa en los formularios Flask-WTF). Compruebe sicsrf_token
se requiere un campo oculto y agréguelo a la carga útil con el nombre de usuario y la contraseña:fuente