Я борюсь с естественным языком процесса, который дает мне список индекса из-за ошибки диапазона - PullRequest
0 голосов
/ 07 июня 2019

Я запускаю веб-сканирование для сбора комментариев с сайта с селеном хрома.Но у меня

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

1 Ответ

0 голосов
/ 07 июня 2019

Согласно документации здесь этот метод возвращает пустой список, если ничего не найдено. Пустой список нарушит доступ к списку [i]. Вы уверены, что получаете что-то обратно? Разбейте линию на две части и попробуйте

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

Если это работает, вы можете рассмотреть возможность использования блоков try catch для корректного выхода из программы при возникновении таких ошибок.

...