Selenium TypeError: 'WebElement'-Objekt ist nicht subskriptierbar [Duplikat]

Dec 17 2020

Ich habe versucht, ein Wörterbuch zu erstellen, indem ich die Elemente einer vorherigen iterierbaren Liste angehängt habe, und ich weiß nicht, wo das Problem liegt:

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)

 
    

Der vorherige Code wurde geändert, indem die hier gegebenen Hinweise befolgt wurden (der Grund, warum sich der folgende Fehler vom obigen Code unterscheidet), aber er gibt mir immer noch den gleichen Fehler, sodass ich beschlossen habe, den gesamten Code einzufügen

---------------------------------------------------------------------------
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

Antworten

patrec Dec 17 2020 at 00:47

Sie müssen eine Liste von Wörterbüchern erstellen. Zuerst erstellen Sie ein spezifisches Wörterbuch für jeden Artikel, füllen es mit den richtigen Informationen und hängen dieses Wörterbuch dann an Ihre Liste anElEconomista

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)