@EVG82

Как устранить ошибку при парсинге?

Написал знакомый скрипт парсинга сайта и пропал со связи.
В общем при тесте вываливается такая ошибка

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

Погуглил. Ошибка такая имеет место быть у многих.

Только вот не понял как решение применить.
Как то код надо дополнить чтобы он игнорил эту ошибку.

Вот код
class Google:
    dir = os.path.dirname(__file__)
    driver = webdriver.Chrome(os.path.join(dir, driver_name))
    driver.maximize_window()
    time = 0.3
    was = []

    def level(self, text, element):
        if element.text.split('\n')[0] in self.was:
            return
        else:
            self.was.append(element.text.split('\n')[0])
        text.append(element.text.split('\n')[0])
        try:
            element.find_element(By.XPATH, './/ul')
        except NoSuchElementException:
            with open('text.txt', 'a') as f:
                print(element.tag_name, element.text, text)
                f.write('/'.join(text)+'\n')
        else:
            pluses = element.find_elements(By.XPATH, './/*[starts-with(@id,"plus_")]')
            for plus in pluses:
                try:
                    plus.click()
                    time.sleep(self.time)
                except ElementNotInteractableException:
                    continue
                except ElementClickInterceptedException:
                    plus.click()
                    time.sleep(self.time)
            elements = element.find_elements(By.XPATH, './/li')
            for el in elements:
                # print(el.tag_name, el.text, element.text)
                self.level(text, el)
        text.pop(-1)

    def parse(self, url):
        with open('text.txt', 'w') as f:
            pass
        self.driver.get(url)
        text = []
        pluses = self.driver.find_elements(By.XPATH, '//*[starts-with(@id,"plus_")]')
        for plus in pluses:
            plus.click()
            time.sleep(self.time)

        elements = self.driver.find_elements(By.XPATH, '//li')
        for element in elements[7:]:
            self.level(text, element)

        time.sleep(1)


Подскажите где добавить код рекомендуемый здесь?
https://habr.com/ru/post/573144/
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы