Selenium (python):遍历跨度列表并仅获取具有特定负载的 href

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

意大利在官方“Gazzetta Ufficiale”网站上公布其法律。

这是一个 sample page,您可以在其中看到在 id=elenco_hp 的 div 中有一长串 span。

我试图了解如何遍历跨度,当我找到类似 <span class="emettitore">AGENZIA ITALIANA DEL FARMACO</span> 的跨度时,然后获取以下 <span class="risultato"> 跨度(一个或多个)中包含的所有后续 href 字符串直到我读到“rubrica”或“emettitore”跨度。

我尝试了以下代码,但它不起作用:

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)  

但只打印了大约 20 张 None。

要打印 href 属性的值,您必须引入 for the visibility_of_all_elements_located() and you can use either of the following :

  • 使用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")))])
    
  • 使用 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")))])
    
  • 控制台输出:

    ['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']
    
  • 注意:您必须添加以下导入:

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