首页 > 解决方案 > 我正在与自然语言过程作斗争,这给了我列表索引超出范围的错误

问题描述

我正在运行网络爬取以收集来自带有 selenium chrome 的网站的评论。但我有

IndexError:使用此代码中的代码驱动程序列出超出范围的索引

find_elements_by_class_name("item")[i].click()

完整的代码是:

for i in range(0,len(item_number)):

driver.find_elements_by_class_name("item")[i].click() <gives error>

time.sleep(2.5)
driver.switch_to.window(driver.window_handles[1])
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2.5)
driver.find_element_by_xpath("//*[@data-tab-id='review']").click()
time.sleep(1.5)
if driver.find_elements_by_class_name("review_tit")[1].find_element_by_class_name("count").text =='총 0개':
    driver.close()
    driver.switch_to.window(driver.window_handles[0])
else:
    review_number = len(driver.find_elements_by_class_name("review_txt"))
    if review_number== 20:
        while review_number == 20:
            review_number = len(driver.find_elements_by_class_name("review_txt"))
            for j in range(review_number):
                review.append(driver.find_elements_by_class_name("review_txt")[j].text)
                score.append(int(driver.find_elements_by_xpath('//i[@class="star"]')[j+1].get_attribute("style").split(" ")[1].split("%")[0])/20)
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(1.5)
            element = driver.find_elements_by_class_name('next_page')[0]
            driver.execute_script("arguments[0].click();", element)
            time.sleep(1.5)
            review_number=len(driver.find_elements_by_class_name("review_txt"))
        else:
            for j in range(review_number):
                review.append(driver.find_elements_by_class_name("review_txt")[j].text)
                date.append(driver.find_element_by_id("_reviewList").find_elements_by_class_name("date")[j].text)
                score.append(int(driver.find_elements_by_xpath('//i[@class="star"]')[j+1].get_attribute("style").split(" ")[1].split("%")[0])/20)
        driver.close()
        driver.switch_to.window(driver.window_handles[0])

错误是

IndexError:列表索引超出范围

从这段代码

---> driver.find_elements_by_class_name("item")[i].click()

标签: python-3.xweb-crawlerselenium-chromedriver

解决方案


根据此处的文档,如果未找到任何内容,该方法将返回一个空列表。空列表会破坏[i]列表访问。你确定你得到了一些回报?将线路一分为二并尝试

result = driver.find_elements_by_class_name("item")
if( len(result) > 0):
    result[i].click()

如果这可行,您可以考虑使用 try catch 块在发生此类错误时优雅地退出程序。


推荐阅读