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 шт):
1. Самый простой и надёжный вариант: всё таки разделить код и запускать отдельно. Локально в разных консолях спокойно запустится, на сервере systemd (как пример) для каждого файла, и всё так же успешно будет паралельно работать, тем более раз selenium никак не взаимодействует с кодом бота.
2. Если принципиально в одном проекте, то есть библиотека aioselenium. Она давно не обновлялась, но можете рассмотреть как альтернативу для selenium.
Не рационально прибегать к потокам в данном случае.
Можно использовать библиотеку playwright. Она асинхронная, и с ней проще работать.
Отправляешь сообщение через send_message(), и вместо текста просто указываешь переменную, которую получил в ответ.