Selenium TypeError: Đối tượng 'WebElement' không thể chỉ định được [trùng lặp]

Dec 17 2020

Tôi đã cố gắng tạo từ điển bằng cách nối các mục của danh sách có thể lặp lại trước đó và tôi không biết vấn đề là gì:

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)

 
    

Mã trước đó đã được sửa đổi bằng cách thực hiện các lời khuyên được đưa ra ở đây, (lý do tại sao lỗi bên dưới khác với mã ở trên), nhưng nó vẫn cho tôi cùng một lỗi, vì vậy tôi quyết định đặt tất cả mã

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

Trả lời

patrec Dec 17 2020 at 00:47

Bạn cần tạo một danh sách các từ điển. Vì vậy, trước tiên, bạn tạo một từ điển cụ thể cho từng bài báo và điền vào nó với thông tin thích hợp, sau đó thêm từ điển đó vào danh sách của bạnElEconomista

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)