Selenium TypeError : 'WebElement'개체는 구독 할 수 없습니다. [중복]
Dec 17 2020
이전 반복 가능한 목록의 항목을 추가하여 사전을 만들려고했지만 문제가 무엇인지 모르겠습니다.
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)
이전 코드는 여기에 제공된 조언 (아래 오류가 위 코드와 다른 이유)에 따라 수정되었지만 여전히 동일한 오류가 발생하므로 모든 코드를 입력하기로 결정했습니다.
---------------------------------------------------------------------------
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
답변
patrec Dec 17 2020 at 00:47
사전 목록을 만들어야합니다. 따라서 먼저 각 기사에 대한 특정 사전을 만들고 적절한 정보로 채운 다음 해당 사전을 목록에 추가합니다.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)