es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La biblioteca de solicitudes de Python falla al iniciar sesión cuando existen elementos ocultos en el formulario.

Estoy teniendo un problema al intentar iniciar sesión en un sitio web que tiene elementos ocultos dentro del formulario.
Cuando existen elementos ocultos como <input type="hidden" name="name1" value=""> en el formulario de inicio de sesión, sé que también deben pasarse al argumento data en requests.post(data={}) junto con su nombre y valor de la siguiente manera.

import requests

payload = {
    'Email': 'email@gmail.com',
    'Password': 'password&##39;,
    # Los elementos con type="hidden"
    'valor_del_atributo_name': 'valor del atributo value'}

with requests.Session() as s:
    # Enviando información de inicio de sesión
    login = s.post('url', data=payload)
    print(login.url)

Pero hay algunos sitios web que inicialmente no asignan un valor al atributo value. En su lugar, actualizan el atributo de valor al enviar el formulario con Javascript o algo similar. En ese caso, el módulo de solicitudes de Python falla al iniciar sesión porque no hay forma de actualizar el código después de enviar el formulario.

¿Es esto alguna especie de truco que los sitios web usan para detener este tipo de automatizaciones? Si es así, ¿hay alguna forma de superar este problema? Sé que se puede hacer con Selenium, pero espero una solución usando la biblioteca de requests. Cualquier respuesta sería realmente apreciada.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, los sitios web utilizan elementos ocultos con valores generados dinámicamente como medida de seguridad para evitar que los bots o scripts automatizados inicien sesión. La idea es hacer difícil para la herramienta de automatización adivinar el valor correcto del elemento oculto.

    Para solucionar este problema con la biblioteca de solicitudes, un enfoque es hacer primero una solicitud GET a la página de inicio de sesión y luego analizar la respuesta HTML utilizando una biblioteca de análisis como BeautifulSoup. Busque los elementos ocultos y sus nombres de atributos correspondientes. Luego, utilice los nombres y valores de atributos extraídos en la solicitud POST para iniciar sesión.

    Aquí hay un ejemplo:

    import requests
    from bs4 import BeautifulSoup
    
    # Hacer una solicitud GET a la página de inicio de sesión
    login_page = requests.get('url')
    
    # Analizar la respuesta HTML
    soup = BeautifulSoup(login_page.content, 'html.parser')
    
    # Buscar los elementos ocultos y sus nombres de atributos
    hidden_elements = soup.find_all('input', {'type': 'hidden'})
    payload = {
        'Email': 'email@gmail.com',
        'Password': 'password'
    }
    for element in hidden_elements:
        name = element['name']
        value = element.get('value', '')  # Algunos sitios web no asignan un valor inicialmente
        payload[name] = value
    
    # Hacer la solicitud POST para iniciar sesión
    with requests.Session() as s:
        login = s.post('url', data=payload)
        print(login.url)
    

    Este código extrae todos los elementos input ocultos en el formulario de inicio de sesión y agrega sus nombres de atributos y valores al diccionario payload. Luego, este diccionario se utiliza en la solicitud POST para iniciar sesión.

    Tenga en cuenta que este enfoque puede no funcionar si el sitio web utiliza técnicas más sofisticadas como captcha o autenticación de dos factores. En tales casos, puede ser necesario utilizar una herramienta como Selenium.

Comments are closed.