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