Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

928
Vistas
No se puede extraer el título del producto de una página web

Estoy tratando de raspar el título del producto disponible en esta página web usando el módulo de solicitudes, pero el script siempre arroja AttributeError incluso cuando el título del producto está en la fuente de la página ( ctrl + U ).

Lo he intentado con ( throws AttributeError ):

 import requests from bs4 import BeautifulSoup link = 'https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', } res = requests.get(link, headers=headers) soup = BeautifulSoup(res.text,"lxml") try: product_title = soup.select_one("h1 > span").get_text(strip=True) except AttributeError: product_title = "" print(product_title)

Rendimiento esperado:

 Gigabyte GeForce RTX 3070 Aorus Master 8GB OC GPU

¿Cómo puedo extraer el título del producto de esa página web?

PD: también lo intenté con este rascador de nubes de la biblioteca, pero no tuve suerte.

EDITAR:

Esto es lo que obtengo raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 403 Client Error: Forbidden for url cuando ejecuto el siguiente código:

 import cfscrape url = 'https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', } token, agent = cfscrape.get_tokens(url, headers=headers) print(token, agent)

Sé que podría haber usado el valor de cf_clearance dentro de las cookies para acceder al contenido de la página, si pudiera obtener el valor del token del intento anterior.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¡Algo que necesita en el encabezado de solicitud!

  • Cookie "cf_clearance"
  • Agente de usuario

Muestra

Pasos para obtener cookies

  1. Abrir herramientas de desarrollo de cromo
  2. Cambiar a la pestaña "Red"
  3. Copiar encabezado de solicitud

ingrese la descripción de la imagen aquí

 import requests from bs4 import BeautifulSoup link = 'https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/' h = '''cookie: cf_clearance=718abb68f064be7612ee987ab9d8bc755016f3c2-1623437208-0-150 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4539.2 Safari/537.36''' h = dict(l.split(': ') for l in h.split('\n') if ': ' in l) res = requests.get(link, headers=h) soup = BeautifulSoup(res.text, "lxml") try: product_title = soup.select_one("h1 > span").get_text(strip=True) except AttributeError: product_title = "" print(product_title)
over 4 years ago · Santiago Trujillo Denunciar

0

Este es solo un marcador de posición para la investigación que podría ser útil para otras personas que buscan este problema de omisión de Cloudflare .

Caso de uso


Extracción de información de un sitio web que utiliza Cloudflare CAPTCHA o Javascript Challenge para mejorar la protección.

Solicitudes de Python


El uso de solicitudes de Python estándar. Obtener el servicio de Cloudflare devolverá un código de error 403 Prohibido.

 import requests URL = 'https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX' \ '-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'} response = requests.get(URL, headers=headers) print(f'Status Code: {response.status_code}') print(f'Status Code Reason: {response.reason}') # output Status Code: 403 Status Code Reason: Forbidden

Si observamos los encabezados de respuesta , podemos ver que un servidor de Cloudflare está enviando nuestra solicitud a la URL de destino.

 ...continued from the code above for key, value in response.headers.items(): print(f'KEY NAME: {key}') print(f'KEY VALUE: {value}') print('-----------------------') # output KEY NAME: Date KEY VALUE: Sun, 13 Jun 2021 16:39:03 GMT ----------------------- KEY NAME: Content-Type KEY VALUE: text/html; charset=UTF-8 ----------------------- KEY NAME: Transfer-Encoding KEY VALUE: chunked ----------------------- KEY NAME: Connection KEY VALUE: close ----------------------- KEY NAME: Permissions-Policy KEY VALUE: accelerometer=(),autoplay=(),camera=(),clipboard-read=(),clipboard-write=(),fullscreen=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=() ----------------------- KEY NAME: Cache-Control KEY VALUE: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 ----------------------- KEY NAME: Expires KEY VALUE: Thu, 01 Jan 1970 00:00:01 GMT ----------------------- KEY NAME: X-Frame-Options KEY VALUE: SAMEORIGIN ----------------------- KEY NAME: cf-request-id KEY VALUE: 0aa7d6c7c4000007ff7201b000000001 ----------------------- KEY NAME: Expect-CT KEY VALUE: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" ----------------------- KEY NAME: Set-Cookie KEY VALUE: __cf_bm=72427e2af66c7177feeb88a847fae9c26b66c681-1623602343-1800-AZAmqDfaHZU8IXOH/i3BBVf8pGcws0Gc1Tln5yKUepe3utWlCpagxvALDW6wiHd2pli9Zl45Mg8gC/QSoUFhoes=; path=/; expires=Sun, 13-Jun-21 17:09:03 GMT; domain=.cclonline.com; HttpOnly; Secure; SameSite=None ----------------------- KEY NAME: Vary KEY VALUE: Accept-Encoding ----------------------- KEY NAME: Server KEY VALUE: cloudflare ----------------------- KEY NAME: CF-RAY KEY VALUE: 65ecc0b9383b07ff-ATL ----------------------- KEY NAME: Content-Encoding KEY VALUE: gzip -----------------------

Si observamos el texto de respuesta asociado con las solicitudes de Python , podemos ver otra evidencia relacionada con la protección de Cloudflare .

 ...continued from the code above print(response.text) # output truncated... <title>Please Wait... | Cloudflare</title> <meta name="captcha-bypass" id="captcha-bypass" /> truncated... <form class="challenge-form managed-form" id="challenge-form" action="/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/?__cf_chl_managed_tk__=7d4597196bb14948881846ca16631b64c55f06d3-1623602854-0-AcX2yHJM2sCalL03Opq9RiFjASeYE0Xs0KG4XeG1lezzhzEyu-bL8xsdHuEjNIIKaJkWEmha4DhViRlqWEP_HREOdA8YAY7nnNkBAHbNMs6p_AWgYNLPnSNM13PO2I96hdABtoaaKjOzV4AyJQJ8f08XEW2flN97rPxIMeiR0tI1a3PiON2dN9E_YCyneAuCUfaYWUNGL0Bqd_rkYp3Ljb2zk_kGWizckr1fvhodSEjEB-ByYVK8ODNox2oZ4XPcmCYJ6UNDmbNc406BjMeTf3e72Z7vgdnt3V714VrGN4w_Y4VQ2X1V0OVKUKEH9B5Rxa_4fEZiMAAdxZ6idg69JYMKftuuLemr53n5WAwTwyX2G7N9jmjtarxEQcCqoj9oY7oSFwQTb3ZVb9i5EeavKaE1_67wxpyPybNidBDxhLazDEMefPZGDsV9mSziuIQ90nS5vn-7sUvC8BJATNWPbh6OduchXy-QcMeYhurtukUCm3oDQMP7r4g4qvDCWI3_-ku7u-B4G2XI2kwM_tLVEZiH5uHPjWpHE6eFWohiCTxd4p7vHg7z5ug9feRalYqu3GfInd82GZ-j-7nCqLDmPh2Sjlu6sJGfopqM3XlBrd1kgRZU3Z4uw6JIIqfH0M6K3_weTtem0-Z1zhDUBbVDvgJVeHNNh_bTxHGWbFB0f80tALBMbt67RftO5u1XBUZ-TRftteXBwJ8gmYzOZTo4lQOGQ_771urYXsTuW_sp8PwxvQpEyCnY8zD8dmVz0-waZhOet8MQMwduN2nfGUOrCMwUYO9McsBqzfsT5PJZVkDm-rYBBwqw0PIwvm1-N8ymAjrpSN6ps4FerqK1uQOo77FLiOq8JCOVqdETIZ9NO07A" method="POST" enctype="application/x-www-form-urlencoded"> truncated... <input type="hidden" name="r" value="d5db3eb87c9b42ec7f076916611c296abfd2c842-1623602854-0-AXz7+uyFGbpY1aOLgfZMm0oIiiepEo5I5QmdTnvMmL9fDUc4OMEa2CNYXsbHVjOzdYO+PqegjpNL8R3D9LhDc+Xo0y0ira1zO7foozPj0qdcUpNNr2ZOHqgUyKws6dVgeBNUdF+v9+eNFxSHxOhc4DWDLIw9guBqJg1GaBjG3QCQdZmyFbPxXUQtXTFmtVVuqch9qBFLa/u9deMBCxCWi5fyKoOINtyBtyT4p79ITb9T+6T7fl2epMXNHO6xBW2dPnDP1FmjUQ04CG3ydOaDS5qoSFMPr4InVbMcI2NbQYJYPfWjmncMaga6K+NMNvv8wtiyXpEeWsUgFFeQoDJEuvLI+wkI8mT+vXAnXd8LWy9TpEDVK6uxtLF2C75aU7qJxI9RKANGluWYUXeqE1tXgppgZraIGfRWNPVsQZzqd6SK+Zsg8x8UH7oRRD9blMMPMaekcFQ3zT8QQ5BzEc8wEQ68OhmKbFuAeV/YhhWshpm808gcVHIFH17I+0MEidfV/ny5wBSRZJyQUfOSU9iAv/minNWF6ZA21E/+Zebda2lVF6gyEHgrjecxuOxzY2I2qMm0RCEHO4oSk/X8EtMYirGCQ3FD8PzSvZYx+34QZutXFLVvqT3CR/UcsXybG6wllvIGvZ6j/gdoAwfcS27MyO4mXDMk6TfDqdi+NqlItwgWNdp461RQmPdChRp9kKEy3sTsIAGW9Ky1k/xYYcTvLDpCGFICBEm2JhDyp/FEF9UBYia7XJ4aUEncSUeViqaQ8bXpPk6kEPH5RYEcfaX3he0W5aZHHIGcjgOFZsuu45MWREvbHjO+RcPMib4L+lU1cKQoYx+w5b9e4AJiRnGog3a6E3i/L75bSnk7L3qA+DofeeccI/RPitqDb/lX31fkhwHfdRWoLt+OILsUfHNni/olGABEUDruwDVpR32xlieS7vekdmQL3oOu5BkAOXoObbb+2nzo6Dvgw7M7rb4muC7US4yCTK0BeGSfu2XvFta228IoGIGa8BjUcb09K6nRdWUwrCXLYS+vIJTegKMeyxlMKNXw7vIaPh9vht4zblhN0bqkN/m/opyXEtzLfhsLuEkHdQ0GhTUk2nYgHeKX0j6eW0uQhAD/9TLf6UgILCk0+nQvXfEffQCCe/hEfBfkAgiPhr1E3uyPB4vp6Fpy2nnkkzmGv/3P5wg6afKDmU2Ic32u3U47hOlghnc7NlbzFb5R8Tx6vWrkXMDYHdOaaudLtPp5N9y1ceXXaMNAFMVmoqaiHWuV4KN+2rLolSOGUEFNEoRN6Jw9mlq/zniK23gQ2lSy+wIHPRGvRCxhRr5DeskvLgyviAk7IhLH3zMpqxd7i05BIPV3sB8orBzVE4Rqmam3evpTVEMMFRDt/Ol6XUJi66QrLgJyusuv5xL4pKPWZrw/hn3a5j0zrrChUbvM3S94BeWiJS48hA35S9mXLfaKMAZTYZTMqhbW77qwUuquwW2lPEAgSPY7WvvnNRUPXsS1KCPpiuE0TuDFaZQi9UTqlzkQIq84wqVRjQZ0Y0m3PQeI2BbJZ8woKIKiABWbSOuV/kyy5H4L+RVL7Jmc2ndl3HaQ4XlnwDmTuK/gMbRvZe1taVHOyYsXmfEY4XkiaDUneGjBEGnWyiv49DtiG2TLmmIpP1UITmO677eDSoNLHpxp1guMjwL5m3XHKOFNtpLzuiVH4UJdgTjtnmbGHmKGtyy0k3GPZrwyVkZRyS+FZZ5WhTs05rhS+1sg3oDCyTbWeYX9T4VVswRjxq1HsyH8NdZTN4f9BTn9VU0+9JnVAkgLM4JCkV6wqwQf+QMK/MaYWvBwSjYgFUxdEdT7Rls85/M+4GxcaGsiNmsA5Q=="> <input type="hidden" name="cf_captcha_kind" value="h"> <input type="hidden" name="vc" value="4845a44c225a1fa6a61708e11b613971"> truncated... <script type="text/javascript"> //<![CDATA[ (function(){ var isIE = /(MSIE|Trident\/|Edge\/)/i.test(window.navigator.userAgent); var trkjs = isIE ? new Image() : document.createElement('img'); trkjs.setAttribute("src", "/cdn-cgi/images/trace/managed/js/transparent.gif?ray=65eccd326d61f331"); trkjs.id = "trk_managed_js"; trkjs.setAttribute("alt", ""); document.body.appendChild(trkjs); var cpo=document.createElement('script'); cpo.type='text/javascript'; cpo.src="/cdn-cgi/challenge-platform/h/g/orchestrate/managed/v1?ray=65eccd326d61f331"; document.getElementsByTagName('head')[0].appendChild(cpo); }()); //]]> </script>

La información anterior muestra que las solicitudes de Python que se transmitieron a la URL de destino fueron interceptadas por un servidor de Cloudflare , que desafía la solicitud. Este desafío debe pasarse por alto antes de que se permita continuar con la solicitud inicial.

Paquete cfscrape


El OP declaró que intentaron usar el paquete Python de cfscrape para obtener información del token del servidor de Cloudflare .

Una solicitud de cfscrape estándar proporciona respuestas idénticas a las solicitudes de Python.

 import cfscrape URL = 'https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX' \ '-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'} scraper = cfscrape.create_scraper(delay=10) response = scraper.get(URL, headers=headers) print(f'Status Code: {response.status_code}') print(f'Status Code Reason: {response.reason}') # output Status Code: 403 Status Code Reason: Forbidden

El paquete cfscrape también admite las funciones get_tokens y get_cookie_string, pero ambas generan el código de error 403 Forbidden.

Del código fuente de cfscrape :

 def is_cloudflare_captcha_challenge(resp): return ( resp.status_code == 403 and resp.headers.get("Server", "").startswith("cloudflare") and b"/cdn-cgi/l/chk_captcha" in resp.content ) # the function above is called from this def request(self, method, url, *args, **kwargs): resp = super(CloudflareScraper, self).request(method, url, *args, **kwargs) # Check if Cloudflare captcha challenge is presented if self.is_cloudflare_captcha_challenge(resp): self.handle_captcha_challenge(resp, url) # Check if Cloudflare anti-bot "I'm Under Attack Mode" is enabled if self.is_cloudflare_iuam_challenge(resp): resp = self.solve_cf_challenge(resp, **kwargs) return resp

La función handle_captcha_challenge es lo que intenta resolver el desafío de javascript de Cloudflare . Esta sección del código es lo que está fallando. No está claro qué parte de esa sección está fallando, por lo que se requieren investigaciones y pruebas adicionales.

TENGA EN CUENTA: Según el desarrollador del paquete, el módulo ya no es compatible .

paquete de rascador de nubes


El OP también declaró que intentaron usar el paquete Cloudcraper Python para obtener información del token del servidor Cloudflare . No vale nada que cloudcraper se haya bifurcado de cfscrape, por lo que la sintaxis es similar.

cloudscraper obtiene el mismo código de error 403 Prohibido que cfscrape.

 import cloudscraper URL = 'https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX' \ '-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'} scraper = cloudscraper.create_scraper() response = scraper.get(URL) print(f'Status Code: {response.status_code}') print(f'Status Code Reason: {response.reason}') # output Status Code: 403 Status Code Reason: Forbidden

El paquete cloudscraper también admite las funciones get_tokens y get_cookie_string, pero ambas generan el código de error 403 Forbidden.

paquete de selenio


El OP también declaró que intentaron usar el paquete Selenium Python.

NOTA ESPECIAL: Durante mis pruebas, utilicé selenium con controladores web para Google Chrome , Mozilla Firefox y Microsoft Edge .

En los últimos 12 meses, estas opciones podrían usarse en Selenium para eludir la protección de Cloudflare . Desafortunadamente, estas opciones no funcionan hoy.

 chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) # additional disable-blink-features are available in Chromium source code on Github chrome_options.add_argument("--disable-blink-features=AutomationControlled")

A continuación se muestra un ejemplo de código de selenio que usa el controlador web de Chrome con los interruptores anteriores.

 from selenium import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_argument( "user-agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36") chrome_options.add_argument("start-maximized") chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options) URL = "https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934" driver.get(URL)

El código anterior abre una sesión del navegador, que se enfrenta a un desafío de Javascript de Cloudflare . Durante las pruebas con los interruptores mencionados anteriormente, este desafío no se detiene. La ID de Cloudflare Ray, que es una identificación única por solicitud, rota muchas veces antes de que termine manualmente la sesión.

ingrese la descripción de la imagen aquí

se requiere seleniumwire para obtener el código de estado

A continuación se muestra una sesión del controlador web de Chrome en modo autónomo, que también muestra el código de error 403 Prohibido para la URL de destino. La sesión también muestra que la tecnología anti-bot de hcaptcha.com ahora está en la mezcla.

 from seleniumwire import webdriver chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("start-maximized") chrome_options.add_argument("--headless") chrome_options.add_argument( "user-agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36") chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"]) chrome_options.add_experimental_option('useAutomationExtension', False) chrome_options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options) URL = "https://www.cclonline.com/product/334427/GV-N3070AORUS-M-8GD-1-1/Graphics-Cards/Gigabyte-AORUS-GeForce-RTX-3070-MASTER-8GB-Overclocked-Graphics-Card-rev-1-1-/VGA5934" driver.get(URL) for request in driver.requests: print(f'Status Code: {request.response}') print(f'Host Name: {request.host}') # output Status Code: 403 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 200 Host Name: www.cclonline.com ----------------------- Status Code: 302 Host Name: hcaptcha.com ----------------------- Status Code: 200 Host Name: newassets.hcaptcha.com ----------------------- driver.quit()

Una sesión estándar de Chrome webdriver que usa la interfaz de usuario muestra un iFrame con una casilla de verificación "Soy humano" .

ingrese la descripción de la imagen aquí

Si hago clic en el botón manualmente o con la sesión de selenio , aparece un captcha de imagen, lo que aumenta la complejidad de eludir la protección de Cloudflare .

ingrese la descripción de la imagen aquí

cookie cf_clearance


Cuando se resuelve un desafío de Cloudflare CAPTCHA o Javascript, se establece una cookie cf_clearance en el navegador del cliente. La cookie cf_clearance tiene una duración predeterminada de 30 minutos, pero el cliente de Cloudflare la puede configurar.

Si abre la URL de destino del OP manualmente en un navegador Google Chrome, puede ver la cookie cf_clearance usando las herramientas para desarrolladores .

Parece que la duración de la cookie cf_clearance se establece en 60 minutos según la hora UTC en que comenzó esta sesión y la fecha de vencimiento establecida para la cookie.

Hasta ahora no he encontrado una forma de extraer esta cookie usando Python.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda