Home > Mobile >  Selenium (python): iterate through span list and get href of only with specific payload
Selenium (python): iterate through span list and get href of only with specific payload

Time:12-29

Italy publishes its laws on the official "Gazzetta Ufficiale" website.

This is a sample page on which you can see that within a div with id=elenco_hp there is a long list of spans.

I am trying to understand how to iterate through the spans and when I find one like <span >AGENZIA ITALIANA DEL FARMACO</span> then fetch all of the subsequent href strings contained in the following <span > spans (one or several) UNTIL I I read a "rubrica" or "emettitore" span.

I tried the following code but it does not work:

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver.get("https://www.gazzettaufficiale.it/gazzetta/serie_generale/caricaDettaglio?dataPubblicazioneGazzetta=2021-05-19&numeroGazzetta=118")
elems = driver.find_elements_by_class_name("risultato")
links = [elem.get_attribute("href") for elem in elems]
    for link in links:
         print(link)  

but only get around 20 prints of None.

CodePudding user response:

To print the value of the href attribute you have to induce WebDriverWait for the visibility_of_all_elements_located() and you can use either of the following Locator Strategies:

  • Using CSS_SELECTOR:

    driver.get("https://www.gazzettaufficiale.it/gazzetta/serie_generale/caricaDettaglio?dataPubblicazioneGazzetta=2021-05-19&numeroGazzetta=118")
    print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "span.emettitore  span.risultato > a")))])
    
  • Using XPATH:

    driver.get("https://www.gazzettaufficiale.it/gazzetta/serie_generale/caricaDettaglio?dataPubblicazioneGazzetta=2021-05-19&numeroGazzetta=118")
    print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[@class='emettitore']//following::span[@class='risultato']/a")))])
    
  • Console Output:

    ['https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21G00076&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21G00076&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02967&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02967&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02966&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02966&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02743&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02743&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A03151&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A03151&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02741&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02741&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A03056&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A03056&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02882&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02882&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02744&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02744&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02640&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02640&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02928&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02928&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02948&elenco30giorni=false', 'https://www.gazzettaufficiale.it/atto/serie_generale/caricaDettaglioAtto/originario?atto.dataPubblicazioneGazzetta=2021-05-19&atto.codiceRedazionale=21A02948&elenco30giorni=false']
    
  • Note : You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Related