No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende Ingl茅s, Programaci贸n, AI, Ciberseguridad y m谩s a precio especial.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

2 D铆as
0 Hrs
55 Min
19 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 鈥渇ind_element_by_xpath鈥 muestre un 鈥渄eprecated 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.

鈥榚lements鈥 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 = 鈥淐ontainerFooterCard0鈥漖/a鈥)

Segmentos:

segmentos = vuelo.find_elements(by = By.XPATH, value = 鈥//article[@class = 鈥渟c-kyCyAI eyGAeO鈥漖/div/section[@data-test = 鈥渟ection-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=鈥渃lose鈥漖 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 鈥榮egments-graph鈥 y 鈥榮egments-graph-segment鈥. Ahora aparecen clases acortadas que son 鈥榙if铆ciles鈥 de ubicar, un como me aparecieron a mi fue 鈥榮c-epnACN鈥 y 鈥榝VwNvS鈥 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')```