索引器错误:列表索引超出范围/AttributeError:'list'对象没有属性'get\u attribute'

2024-10-06 11:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here

我正试图从instagram中获取喜欢/浏览的内容。但是,下面是一个错误:

索引器:列表索引超出范围:---when i try viewcth[0].get_attribute('innerHTML')

AttributeError:'list'对象没有属性'get_attribute':---当我尝试viewct = viewcth.get_attribute('innerHTML')

代码:

viewcth = bdy.find_elements_by_xpath(".//*[@class='eo2As ']//*[@class='EDfFK ygqzn']//*[@class='Nm9Fw']")
if (len(viewcth) != 0):
    viewct = viewcth[0].get_attribute('innerText')
else:
    viewcth = bdy.find_elements_by_xpath(".//*[@class='eo2As ']//*[@class='HbPOm _9Ytll']//*[@class='vcOH2']")
    # viewct = viewcth.get_attribute('innerHTML')
    viewct = viewcth[0].get_attribute('innerHTML')
pagedict['viewcount'] = viewct
print("Viewct is " + viewct)

Tags: 内容getbyattributeelementsfindxpathclass
2条回答

您使用了错误的定位器。
这就是为什么viewcth是空列表。
find_elements_by_xpath(".//*[@class='eo2As ']//*[@class='EDfFK ygqzn']//*[@class='Nm9Fw']")找不到匹配的元素并返回空列表。
因此,当您试图通过viewcth[0]从该列表中获取第一个元素时,您将获得

IndexError: list index out of range.

如果您试图执行viewct = viewcth.get_attribute('innerHTML'),这会给您

AttributeError: 'list' object has no attribute 'get_attribute'

因为viewcth是一个列表。空,但仍然是一个列表。
因此,不能对列表应用.get_attribute('innerHTML')方法,它不是web元素。
如果您想获得更多的类似信息,请尝试以下方法:
用于图像

likes = bdy.find_element_by_xpath(".//a[@class='zV_Nj']/span").text

有关视频:

likes = bdy.find_element_by_xpath(".//div[@class='Nm9Fw']/a").text

likes = bdy.find_element_by_xpath(".//div[@class='HbPOm _9Ytll']/span").text

请参见viewcth是Python中的列表

你已经说过:

AttributeError: 'list' object has no attribute 'get_attribute' : - when i try viewct = viewcth.get_attribute('innerHTML')

所以当您不能在列表中使用get_attribute()时。但是在您的代码中,我看到,您没有使用viewcth.get_attribute('innerHTML'),而是使用了它

viewcth[0].get_attribute('innerHTML')

我想这是对的

我用了一个计数器来计算评论总数

示例代码:

counter = 0
viewcth = driver.find_elements_by_xpath(".//*[@class='eo2As ']//*[@class='EDfFK ygqzn']//*[@class='Nm9Fw']")
if (len(viewcth) != 0):
    abc = viewcth[0].get_attribute('innerHTML')
    counter = counter  + 1
else:
    viewcth2 = driver.find_elements_by_xpath(".//*[@class='eo2As ']//*[@class='HbPOm _9Ytll']//*[@class='vcOH2']")
    cde = viewcth2[0].get_attribute('innerHTML')
    counter = counter + 1

print("total view  is ",  counter)

更新1:

您可以尝试以下xpath:

要仅获取数字,请执行以下操作:

//textarea/ancestor::section/preceding-sibling::section[1]/descendant::span

代码:

wait = WebDriverWait(driver, 10)
print(wait.until(EC.element_to_be_clickable((By.XPATH, "//textarea/ancestor::section/preceding-sibling::section[1]/descendant::span"))).text)

导入:

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

相关问题 更多 >