AttributeError в методе getText - PullRequest
       8

AttributeError в методе getText

0 голосов
/ 25 сентября 2018

Когда я собираю информацию, все идет хорошо, но иногда, когда я собираю много информации, я получаю

AttributeError: объект 'NoneType' не имеет атрибута 'h1' .Ниже мой код:

    for index, link in enumerate(all_links):
        self.driver.execute_script("window.open('" + link + "');")
        print(link)
        sleep(9)
        self.driver.switch_to.window(self.driver.window_handles[1])
        final_soup = BeautifulSoup(self.driver.page_source, 'lxml')
        image = final_soup.find('div', attrs={'class': 'someClass_1'})
        filename = 'image_' + str(index) + '.png'
        title = final_soup.find('div', attrs={'class': 'someClass_2'})
        sleep(1)
        origin_title = title.h1.getText()   # here is the problem
        print(origin_title)

Эта ошибка иногда возникает, странная вещь в том, что я проверяю HTML для конкретной ссылки, и все выглядит так же, как другие ссылки, я не знаю, почему я получаюошибка. Текст в теге h1 есть.

Я пытаюсь увеличить сон, но ничего не изменилось. Другое, что я могу сделать, это добавить try - catch:

 try:
    origin_title = title.h1.getText()   # here is the problem
    print(origin_title)
 except AttributeError:
    pass

Но моя проблема здесь в том, что я не хочу проходить, если не могу найти текст в теге h1, текст есть, и я должен каким-то образом его получить

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Этот код делает ту работу, которая мне нужна.Похоже, что ошибка может быть из-за неожиданного отключения Интернета или отсутствия ответа сервера.

 while True:
            try:
                title = final_soup.find('div', attrs={'class': 'someclass'})
                sleep(1)
                origin_title = title.h1.getText()
                print(origin_title)
            except Exception as ex:
                print('number of try', i)
                sleep(1)
                i += 1
                continue
            break
0 голосов
/ 25 сентября 2018

исправьте строку кода с этой строкой

final_soup.find('div', attrs={'class': 'someClass_2)

с этой строкой

final_soup.find('div', {'class': 'someClass_2'})

вы пропустили "'}"

...