@ksiim

Как правильно использовать run_in_executor?

у меня есть класс АвитоПарсер, вот как он описан:
class AvitoParcer:

    def __init__(self):
        self.dirct = os.getcwd() + '/chromedriver.exe'
        self.options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(executable_path=self.dirct, options=self.options)
        self.driver.get('https://www.avito.ru')


при вводе в определенный state, я вызываю этот класс и циклом while true жду пока появится новое объявление, то есть время выкладывания первого объявления не станет несколько секунд назад или 1 минуту назад. я понимаю что я делаю неправильно, используя while true, ведь пока выполняется этот цикл, все остальное как бы замораживается, while true блокирует все остальное. хотелось бы узнать, как правильно сделать такую прогонку сайта, чтобы в любой момент ее можно было остановить сообщением в телеграме.

вот моя блокирующая проверка
async def checker_start(msg: types.Message, state: FSMContext):
    if msg.text.title() == 'Да':
        parser = AvitoParcer()
        await FSMAd.ad.set()
        while True:
            parser.update_page()
            date = parser.get_time()
            if date == '1 минуту назад' or date == 'Несколько секунд назад' or date == '2 минуты назад':
                date = parser.get_time()
                name = parser.get_name()
                desc = parser.get_desc()
                image_url = parser.get_image_url()
                url = parser.get_url()
                price = parser.get_price()
                await bot.send_photo(
                    msg.from_user.id,
                    caption=f'Найдено новое объявление. Выложено:{date}\n'
                            f'{name}\n'
                            f'{desc}\n'
                            f'{price}\n'
                            f'ссылка - {url}', photo=f'{image_url}')
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Ну для начала посмотри пакет arsenic, это селениум с асинхронной обёрткой. Можно будет переписать твой парсер на асинхронный подход, и не париться по поводу блокировки бота.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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