Aiogram + selenium

Есть тг бот, который отвечает на команды /start и тд. А еще есть код на селениуме который просто в цикле ходит по страницам(и плюсом в седениуме нужно отправлять сообщение в тг бота).Если запустить все вместе то тг будет блокироваться, так как селениум же не асинхронный. Задача: чтобы все работало вместе

Как это рализовать через потоки?

from config import API_TOKEN
from selenium import webdriver
import asyncio
from aiogram import executor

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
driver = webdriver.Chrome()

@dp.message_handler(commands=['start'])
async def start_handler(message: types.Message):
    await bot.send_message(user_id, "Старт")

            
async def main(bot):
    await bot.send_message(user_id, "Запустил бот")
    while True:
        driver.get("https://www.google.com/")
        
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.create_task(main(bot))
    executor.start_polling(dp, skip_updates=True)```
   

Ответы (2 шт):

Автор решения: Medvedev

1. Самый простой и надёжный вариант: всё таки разделить код и запускать отдельно. Локально в разных консолях спокойно запустится, на сервере systemd (как пример) для каждого файла, и всё так же успешно будет паралельно работать, тем более раз selenium никак не взаимодействует с кодом бота.

2. Если принципиально в одном проекте, то есть библиотека aioselenium. Она давно не обновлялась, но можете рассмотреть как альтернативу для selenium.

Не рационально прибегать к потокам в данном случае.

→ Ссылка
Автор решения: Habibullo zukhurov

Можно использовать библиотеку playwright. Она асинхронная, и с ней проще работать.

Отправляешь сообщение через send_message(), и вместо текста просто указываешь переменную, которую получил в ответ.

→ Ссылка