No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
20 Hrs
46 Min
43 Seg

Interactuando con los elementos

14/30
Recursos

Aportes 43

Preguntas 8

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Al día de hoy las clases son:

  • sc-hZSUBg gfeULV
  • sc-cLQEGU hyoued
segmentos = vuelo.find_elements_by_xpath('//div[@class="sc-hZSUBg gfeULV"]/div[@class="sc-cLQEGU hyoued"]')

Esto parece magia, me motiva este tema 😄

si alguno tuvo problemas que no le figuraban los nombres de las clases como los menciona Martin, buscar en el codigo el nombre, al parecer los actualizaron.
En el mio funciono este:

boton_escalas=vuelo.find_element_by_xpath('.//div[@class="flight-summary-stops-description"]/button')
boton_escalas.click()
##aca prestar atencion a los nombres de las calses, los cambiaron
segmentos = vuelo.find_elements_by_xpath('//div[@class="sc-hZSUBg bOhNnO"]/div[@class="sc-cLQEGU hyoued"]')
segmentos
escalas = len(segmentos) - 1
escalas```

ACTUALIZACIJÓN MARZO

river = webdriver.Chrome()
driver.get(url)

boton_escalas = driver.find_element(By.XPATH, '//a [@id="itinerary-modal-0-dialog-open"]')
boton_escalas.click()

Si están usando Selenium 4, es posible que “find_element_by_xpath” muestre un “deprecated warning”. De esta forma pueden evitar ese warning:

from selenium.webdriver.common.by import By
vuelos = driver.find_element(by=By.XPATH, value='su_xpath')

En la página donde intento hacer este ejercicio, los DIV no tienen clase y esto no me ha permitido continuar con el ejercicio.

Ayuda !

segmentos = driver.find_elements(by=By.XPATH, value='//section[@data-test="section-info-leg"]')

Si tuvieron problemas con el código de los segmentos, este es el código con las actualizaciones (hasta hoy) de la página de Latam. Espero les sirva.

segmentos = vuelo.find_elements_by_xpath('//div[@class="sc-hZSUBg gfeULV"]/div[@class="sc-cLQEGU hyoued"]')
segmentos

Anotaciones y Ejercicios Curso de Web Scraping - Modulo I
Te dejo todas las anotaciones del curso actualizados al 2023, tome nota de los comentarios y ejercicios resueltos de cada sección. Lleve en cuenta las explicaciones del docente y más! Espero te sirva. 👌
(si quieres apoyar deja una estrella a la repo ✌⭐)

Algunos datos a los cuales queremos acceder se encuentran dentro de otro link o al darle clic en un enlace, ejemplo un modal dentro de la pagina. Para esto debemos usar selenium donde le indicaremos o donde le daremos ese clic.

Realizamos la ruta del botón de escalas

boton_escalas = vuelo.find_element_by_xpath('//div[@class="flight-summary-stops-description"]/button')
boton_escalas
<selenium.webdriver.remote.webelement.WebElement (session="f0d01af0f1c79510eb9c5ec81bc44761", element="15479a9d-8078-47d9-8e60-96e9d7282c71")>

Para dar clic en el botón ya identificado solo ejecutamos el método .click()

boton_escalas.click()

Automáticamente nos abre el menú de itenerario de vuelo

Ya abierto el modal. Realizamos la ruta para identificar la cantidad de escalas del vuelo. En este caso le quitamos el punto para buscar en toda la web.

‘elements’ es en plural porque traeremos varios elementos. Y cuando imprimimos segmentos nos traerá los tramos del vuelo.

segmentos = vuelo.find_elements_by_xpath('//div[@class="sc-hZSUBg gfeULV"]/div[@class="sc-cLQEGU hyoued"]')
segmentos
[<selenium.webdriver.remote.webelement.WebElement (session="f0d01af0f1c79510eb9c5ec81bc44761", element="0f5c204d-0940-4470-8edc-e592d0c35a53")>,
 <selenium.webdriver.remote.webelement.WebElement (session="f0d01af0f1c79510eb9c5ec81bc44761", element="2a025999-cd97-4ced-bb73-776093229228")>,
 <selenium.webdriver.remote.webelement.WebElement (session="f0d01af0f1c79510eb9c5ec81bc44761", element="31a1563e-472e-4d94-9c0b-42a6d965b41b")>]

Para la cantidad de escalas podemos contar los tramos y restar 1 y obtendremos la cantidad de escalas para el vuelo scrapeado.

escalas = len(segmentos) - 1
escalas

Ya que las paginas cambian constantemente, la clase ya no es la del video, entonces utilice el xpath que me lleve al button sin necesidad de usar la clase.

button_escalas = vuelo.find_element_by_xpath("./div/div/div/div[2]/button")

Para los que les da error al hacer click, estoy usando wsl de windows y me salio error . Pueden usar esto

driver.execute_script("arguments[0].click();", boton_escalas)

19/08/23 reto

<code>
inf=vuelo.find_elements_by_xpath('.//div[@class="card-flightstyle__ContainerFlightInfo-sc__sc-16r5pdw-15 ewHafW flight-information"]')
inf
inf=vuelo.find_elements_by_xpath('.//div[@class="card-flightstyle__ContainerFlightInfo-sc__sc-16r5pdw-15 ewHafW flight-information"]')
inf
[<selenium.webdriver.remote.webelement.WebElement (session="ea05b97804add61a7bf72c013618c57e", element="5611D6FA00F7D3035ACB67349E0E276A_element_700")>,
 <selenium.webdriver.remote.webelement.WebElement (session="ea05b97804add61a7bf72c013618c57e", element="5611D6FA00F7D3035ACB67349E0E276A_element_701")>]
dep=inf[0]
arr=inf[1]
dep
<selenium.webdriver.remote.webelement.WebElement (session="ea05b97804add61a7bf72c013618c57e", element="5611D6FA00F7D3035ACB67349E0E276A_element_700")>
arr
<selenium.webdriver.remote.webelement.WebElement (session="ea05b97804add61a7bf72c013618c57e", element="5611D6FA00F7D3035ACB67349E0E276A_element_701")>
#departure time
dep_time=dep.find_element_by_xpath('./span[@class="card-flightstyle__TextHourFlight-sc__sc-16r5pdw-18 kKmcWo"]').text
dep_time
'12:25 a. m.'
#fligth origin
​
dep_site=dep.find_element_by_xpath('./span[@class="card-flightstyle__TextIATA-sc__sc-16r5pdw-19 ksoviQ"]').text
dep_site
'CUN'

#estimated fligth duration [0]
dur=vuelo.find_element_by_xpath('.//span[@class="card-flightstyle__TextTotalTimeFlight-sc__sc-16r5pdw-20 fuxJTD" ] ').text
dur
'13 h 30 min'
arr_time=arr.find_element_by_xpath('.//span[@class="card-flightstyle__TextHourFlight-sc__sc-16r5pdw-18 kKmcWo"]').text
arr_time
'3:55 p. m.'
arr_site=arr.find_element_by_xpath('./span[@class="card-flightstyle__TextIATA-sc__sc-16r5pdw-19 ksoviQ"]').text
arr_site
'AEP' 

Aqui está mi version de la parte de los segmentos

segmentos = vuelo.find_elements(by=By.XPATH,value ='//article[@class="itinerarystyle__Wrapper-sc__sc-1n97ky6-0 hfhDJj"]/div/section')
segmentos

Aquí dejo mi version, que funciona para el vuelo seleccionado en la clase anterior

boton_escalas = vuelo.find_element(By.XPATH,'.//div[@class="card-flightstyle__ContainerFooterCard-sc__sc-16r5pdw-24 iMBDQD"]/a')
boton_escalas.click()```

a fecha del 04/09/2020 el primer div sigue siendo sc-hZSUBg gfeULV y el segundo sc-cLQEGU hyoued

Hoy 06.01.2023


boton_escalas = primervuelo.find_elements(by=By.XPATH, value='.//a[@class="sc-gzVnrw fXIzxI"]')[0]
boton_escalas

Al día de hoy:

Boton:

boton_escalas = vuelo.find_element(by = By.XPATH, value = ‘//div[@id = “ContainerFooterCard0”]/a’)

Segmentos:

segmentos = vuelo.find_elements(by = By.XPATH, value = ‘//article[@class = “sc-kyCyAI eyGAeO”]/div/section[@data-test = “section-info-leg”]’)

boton_escalas = vuelo.find_element(by=By.XPATH, value = './/div[@class = "sc-lhLRcH frITtA"]/a')
boton_escalas

boton_escalas.click()

segmentos = vuelo.find_elements(by=By.XPATH, value = '//div[@class = "MuiDialogContent-root sc-fjdhpX jvVjjf"]//section[@class = "sc-fEVUGC gIelIH"]')
segmentos

escalas = len(segmentos) - 1
escalas

Bueno mi aporte al 29 de Octubre de 2022, tengan en cuenta que hasta este punto cambio bastante, así que les dejo mi código para los segmentos.

# Segmentos de la escala
segmentos =  vuelo.find_elements(by=By.XPATH,value='//article/div/section/div')
segmentos

Para hoy 22 02 2022
Este es el código valido

segmentos = vuelo.find_elements(By.XPATH, '//div[@class="sc-cMhqgX foSIcH"]/div[@class="sc-iuJeZd ksIjax"]')
<python> 
vuelos = driver.find_elements_by_xpath('//li[@class="sc-eAudoH rtrCi"]')
vuelo = vuelos[0].find_element_by_xpath('.//div[@class="sc-izvnbC eqFECQ flight-information"]/span[1][@class="sc-gMcBNU gwIRwm"]') 
vuelo.text
# Close Chrome window
driver.close()
</python>

Al día de hoy el código es (21/09/2021):

boton_escalas = vuelo.find_element_by_xpath('.//itinerary-element[@class="stops -hover-pointer"]')
boton_escalas
segmentos = vuelo.find_elements_by_xpath('//div[@id="detail-container"]//div[@class="detail-component"]')
segmentos

Función para obtener la info de todos los vuelos seleccionados

def itinerario_vuelo(vuelo):
    escalas = []
    
    # Se da click sobre el enlace de escalas
    boton_escalas = vuelo.find_element_by_xpath('.//div[contains(@class,"eMunVf")]/a')
    boton_escalas.click()
    
    time.sleep(0.5)
    
    secciones = vuelo.find_elements_by_xpath('//section[@data-test="section-info-leg"]')
    for seccion in secciones:
        escalas.append(seccion.find_element_by_xpath('//div[contains(@class, "airline-wrapper")]').text)
    
    time.sleep(0.5)
    
    # Se cierra la ventana emergente
    boton_escalas_close = vuelo.find_element_by_xpath('//div[@role="dialog"]/button')
    boton_escalas_close.click()
    
    return escalas

Julio 2021, Hasta esta clase, los nodos de la pag de LATAM sigue siendo los mismos usados por el prof.

Al día de hoy:

  • El botón para la selección de las escalas:
boton_escalas = vuelo.find_element_by_xpath('.//div[@class="sc-gJqsIT egdVkV"]/a')
  • Segmentos del vuelos:
segmentos = vuelo.find_elements_by_xpath('//section[@data-test="section-info-leg"]')

Muy chevere el curso, pero como que se les olvida que algunos estamos desde windows y que todo es simplemente diferente.

ayuda por favor!!, al cargar la página me sale un popup que dice "un nuevo mundo.
una nueva forma de volar."
cómo puedo cerrarlo usando selenium, no veo ningún botón de cerrar. solo un span[class=“close”] que al paracer no es clickeable.

Necesito de su ayuda comunidad. Cómo puedes acceder al elemento donde introduces el usuario en la siguiente página: https://forcebeatcolombia.enel.com/geocallcod/

Lo he intentado todo sin mucho éxito. Mi idea es usar selenium para automatizar el login de la página. Les estaría muy agradecido mi Twitter es @luiscarlospxr

Para los que tuvieron un problema similar. Usando exactamente el código como lo usaba el profesor no pude acceder a la pantalla con las escalas, solo hay que hacer unos ajustes de acuerdo a como esté el código html.

En mi caso, el botón para las escalas estaba referenciado como

<span class="connection-message" style="">

De esta forma, en mi caso, el código quedó de la siguiente forma

boton_escalas = vuelo.find_element_by_xpath('.//span[@class="connection-message"]')

Para actualizar un poco, en el apartado de obtener las escalas, en el sitio web de latam ya no aparecen las clases ‘segments-graph’ y ‘segments-graph-segment’. Ahora aparecen clases acortadas que son ‘difíciles’ de ubicar, un como me aparecieron a mi fue ‘sc-epnACN’ y ‘fVwNvS’ respectivamente.

Super clases. 💪```
boton_escalas=vuelo.find_element_by_xpath('.//div[@class="flight-summary-stops-description"]/button')
boton_escalas

boton_escalas.click()
segmentos=vuelo.find_elements_by_xpath('//div[@class="sc-hZSUBg bOhNnO"]/div[@class="sc-cLQEGU hyoued"]')
segmentos

Hola, tengo una pregunta. ¿Por qué los elementos de una lista me los retorna en desorden ? Por ejemplo en la página de Latam vemos un lista de vuelos, pero cuando intento acceder al vuelo[2] por ejemplo me retorna el último.

Etiquetas actualizadas :

segmentos = vuelo.find_elements_by_xpath('//div [@class="sc-hZSUBg jmgyeh"]/div [@class="sc-cLQEGU hyoued"]')

Imprimir las rutas de cada trayecto

rutas = vuelo.find_elements_by_xpath('//abbr[@class = "sc-hrWEMg hlCkST"]')
for i in range(0,len(rutas),2):
    print(f'De {rutas[i].text} a {rutas[i+1].text}')

Resultado:
De BOG a GRU
De GRU a LIS
De LIS a MAD

esta es otra forma de hacerlo y ayuda a muchos que escribieron que el sitio tiene otras clases diferentes

segmentos = vuelo.find_elements_by_xpath('//div[contains(@class, "sc-hZSUBg")]/div[contains(@class, "sc-cLQEGU")]')

Para cerrar el cuadro de diálogo del itinerario de vuelo:

cerrar_escalas = vuelo.find_element_by_xpath('//button[@class="close"]/i[@class="icon-int-close"]')
cerrar_escalas.click()

Totalmente atorado en esta clase. Las clases que me figuran a mi son bastante más simples que las que veo en comentarios. Aún así no llego a ningún lado. Debería ser fácil encontrar la ruta con xpath, pero ahora el programa no para de tirarme errores.

Para cumplir el reto use el siguiente código:

vuelos = wd.find_elements_by_xpath('//li/div/div/div[@class="sc-yZwTr lklTPR"]')
vuelo = vuelos[0]
datos = vuelo.find_elements_by_xpath('./div/div[@class="sc-fjhmcy dbJOiq flight-information"]/span[@class="sc-lnmtFM ewiHQE"]')
print(salida)
salida = datos[0].text
llegada = datos[1].text
duracion = vuelo.find_element_by_xpath('./div/div[@class="sc-fjhmcy dbJOiq flight-duration"]/span[@class="sc-FQuPU dkpBdw"]').text

Pero creo que las clases se generan automáticamente entonces no serviría para generalizar las búsquedas.

interesante

xpath a la fecha de hoy

vuelo.find_elements_by_xpath('//div[@class="sc-hZSUBg gfeULV"]/div')```