requests library python python-requests pyquery

library - ¿Cómo "iniciar sesión" en un sitio web utilizando el módulo Peticiones de Python?



python requests html (4)

Estoy intentando publicar una solicitud para iniciar sesión en un sitio web utilizando el módulo de Solicitudes en Python, pero no funciona realmente. 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''

Así que ahora, creo que se supone que debo usar "post" 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 las cookies mal ... no sé.

Si no se registra correctamente, el título de la página de inicio debería aparecer en "Locationary.com" y, si lo hace, debería ser "Página de inicio".

Si pudiera explicar algunas cosas sobre las solicitudes y las cookies y ayudarme con esto, lo agradecería mucho. :RE

Gracias.

... Todavía no funcionaba todavía. Está bien ... así que 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>

Así que creo que lo estoy haciendo bien, pero la salida sigue siendo "Locationary.com"

2nd EDIT:

Deseo poder permanecer conectado durante mucho tiempo y siempre que solicite una página bajo ese dominio, quiero que el contenido aparezca como si estuviera conectado.


Si la información que desea está en la página a la que se dirige inmediatamente después de iniciar sesión ...

Vamos a llamar a su payload ck variable en su lugar, como en los documentos python-requests :

payload = {''inUserName'': ''USERNAME/EMAIL'', ''inUserPass'': ''PASSWORD''} url = ''http://www.locationary.com/home/index2.jsp'' requests.post(url, data=payload)

De otra manera...

Ver https://.com/a/17633072/111362 continuación.


Averigüe 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 script a continuación. También reemplace la url para apuntar al sitio deseado para iniciar sesión.

login.py

#!/usr/bin/env python import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) payload = { ''username'': ''[email protected]'', ''password'': ''blahblahsecretpassw0rd'' } url = ''https://website.com/login.html'' requests.post(url, data=payload, verify=False)

El uso de disable_warnings(InsecureRequestWarning) silenciará cualquier resultado del script cuando intente iniciar sesión en sitios con certificados SSL no verificados.

Extra:

Para ejecutar este script desde la línea de comando en un sistema basado en UNIX, colóquelo en un directorio, es decir, home/scripts y agregue este directorio a su ruta en ~/.bash_profile o un archivo similar utilizado por el terminal.

# Custom scripts export CUSTOM_SCRIPTS=home/scripts export PATH=$CUSTOM_SCRIPTS:$PATH

Luego crea un enlace a este python scipt dentro de home/scripts/login.py

ln -s ~/home/scipts/login.py ~/home/scipts/login

Cierre su terminal, inicie uno nuevo, login


Permítanme intentar simplificarlo, supongamos que la URL del sitio es http://example.com/ y supongamos que necesita registrarse rellenando el nombre de usuario y la contraseña, por lo que accedemos a la página de inicio de sesión que dice http://example.com/login.php ahora y ver su código fuente y buscar la URL de acción que estará en forma de etiqueta algo así como

<form name="loginform" method="post" action="userinfo.php">

ahora toma userinfo.php para crear una URL absoluta que será '' http://example.com/userinfo.php '', ahora ejecuta una secuencia de comandos python simple

import requests url = ''http://example.com/userinfo.php'' values = {''username'': ''user'', ''password'': ''pass''} r = requests.post(url, data=values) print r.content

Espero que esto ayude a alguien en algún lugar algún día.


Sé que ha encontrado otra solución, pero para aquellos que, como yo, que encuentran esta pregunta, buscan la misma cosa, se puede lograr con las solicitudes de la siguiente manera:

En primer lugar, como hizo Marcus, verifique el origen del formulario de inicio de sesión para obtener tres elementos de información: la URL a la que se envía el formulario y los atributos de nombre de los campos de nombre de usuario y contraseña. En su ejemplo, están en UserName y en UserPass.

Una vez que lo tenga, puede usar una instancia de requests.Session() para realizar una solicitud posterior a la url de inicio de sesión con sus detalles de inicio de sesión como una carga útil. Realizar 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, puede simplemente usar la instancia de sesión para realizar más solicitudes al sitio. La cookie que lo identifica se usará para autorizar las solicitudes.

Ejemplo

import requests # Fill in your details here to be posted to the login form. payload = { ''inUserName'': ''username'', ''inUserPass'': ''password'' } # Use ''with'' to ensure the session context is closed after use. with requests.Session() as s: p = s.post(''LOGIN_URL'', data=payload) # print the html returned or something more intelligent to see if it''s a successful login page. print p.text # An authorised request. r = s.get(''A protected web page url'') print r.text # etc...