Selenium TypeError: l'objet 'WebElement' n'est pas en indice [duplicate]

Dec 17 2020

J'ai essayé de créer un dictionnaire en ajoutant les éléments d'une liste itérable précédente, et je ne sais pas quel est le problème:

for i in range(3):    
    try:
    #primero: encontrar el boton:
        boton=WebDriverWait(driver,6).until(
            EC.presence_of_element_located(By.XPATH,'//div[@class="entrys-con-banner last clearfix"]//a[@class="btn"]')
        )
        boton.click()
    
    #segundo:esperar a que cargue la informacion:
        WebDriverWait(driver,7).until(
            EC.presence_of_all_elements_located((By.XPATH,'//article[@itemtype="http://schema.org/Article"]'))
        )
    
        sleep(random.uniform(4.0,6.0))
        
    except:
        break
        print("Error")
        

ElEconomista=[]

articulos=driver.find_elements_by_xpath('//article[@itemtype="http://schema.org/Article"]')

for articulo in articulos:
    autor=articulo.find_element_by_xpath('.//p/a').text
    titulo=articulo.find_element_by_xpath('.//div[@class="entry-data"]/h3/a').text
    try:
        nota=articulo.find_element_by_xpath('.//div[@class="entry-data"]/p').text 
    except:
        nota="NA"
    
    #se crea un diccionario para cada item
    articulo_dict=dict()
    
    articulo_dict["autor"]=articulo["autor"]
    articulo_dict["titulo"]=articulo["titulo"]
    articulo_dict["nota"]=articulo["nota"]
    
    ElEconomista.append(articulo_dict)

 
    

Le code précédent a été modifié en suivant les conseils donnés ici, (la raison pour laquelle l'erreur ci-dessous est différente du code ci-dessus), mais il me donne toujours la même erreur, j'ai donc décidé de mettre tout le code

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-01b021486e73> in <module>
     57 
     58     ElEconomista.append({
---> 59         "autor":articulo["autor"],
     60         "titulo":articulo["titulo"],
     61         "nota":articulo["nota"]

TypeError: 'WebElement' object is not subscriptable

Réponses

patrec Dec 17 2020 at 00:47

Vous devez créer une liste de dictionnaires. Donc, commencez par créer un dictionnaire spécifique pour chaque article et remplissez-le avec les informations appropriées, puis ajoutez ce dictionnaire à votre liste.ElEconomista

for articulo in articulos:
    autor=articulo.find_element_by_xpath('.//p/a').text
    titulo=articulo.find_element_by_xpath('.//div[@class="entry-data"]/h3/a').text
    try:
        nota=articulo.find_element_by_xpath('.//div[@class="entry-data"]/p').text 
    except:
        nota="NA"

    articulo_dict = dict()
    articulo_dict["autor"] = autor
    articulo_dict["titulo"] = titulo
    articulo_dict["nota"] = nota

    ElEconomista.append(articulo_dict)