Найти - Пользователи
Полная версия: Падает выполнение скрипта на Windows
Начало » Python для новичков » Падает выполнение скрипта на Windows
1 2
vortex604
На коленке написан бот, который парсит сайт и каждые 30 минут публикует пост в телеграмм канале.
Настроен ноутбук, который не засыпает и работает 24\7 аля Windows сервер.

Кейс:
В 23.00 вечера я запускаю бот Bot.py
Висит “черное окно”. Бот работает - новости публикуются.
С утра в 7.00 черного окна нет. Хотя все остальные программы работают.

Получается ночью, когда я сплю сладким сном, скрипт падает или винда его срубает.

Вопрос: как заставить бот работать “вечно”?

py.user.next
vortex604
На коленке написан бот, который парсит сайт и каждые 30 минут публикует пост в телеграмм канале.
Добавь в этот скрипт журналирование (логирование) и после каждой успешной операции добавляй запись в лог в формате <дата><время><выполненная операция>. Если же происходит сбой, также в лог добавляй запись <дата><время><невыполненная операция><причина> . Так ты узнаешь, когда программа завершила выполнение.
ZerG
Кроме того оберни блок парсинга сайта и блок отправки сообщений в
try/except - даже если произойжет ошибка программу не выбросит и напишет тебе лог
Далее нужно проанализировать данные лога, найти и устранить причину падения
AD0DE412
можно кхм кхм еще запилить проверку работы скрита типа ежеле нет то kill его (на всякий случай) и и потом запуск ну это при условии что это ос не причем а возникает ошибка в работе етого бот.пи
vortex604
Можете помочь с кодом?
Попробовал добавить loguru, но файл все время пустой

 import telebot
import requests
import time
import fake_useragent
from loguru import logger
logger.add("runtime.log")
from bs4 import BeautifulSoup
token = ""
channel_id = "@"
bot = telebot.TeleBot(token)
@logger.catch
@bot.message_handler(content_types=['text'])
def commands(message):
    #bot.send_message(channel_id, message.text)
    if message.text == "Старт":
        #bot.send_message(channel_id, "Hello")
        back_post_id = None
        while True:
            post_text = parser(back_post_id)
            back_post_id = post_text[1]
            if post_text[0] != None:
                bot.send_message(channel_id, post_text[0])
                time.sleep(1800)
    else:
        bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши Старт")
@logger.catch
def parser(back_post_id):
    URL = ""
    user = fake_useragent.UserAgent().random
    header = {'user-agent': user}
    page = requests.get(URL, headers=header)
    soup = BeautifulSoup(page.content, "html.parser")
    post = soup.find('section', class_='post-content', id=True)
    post_id = post["id"]
    
    if post_id != back_post_id:
        title = post.find('h2').text
        description = post.find('p').text
        link = post.find('a')
        url = link.attrs['href']
        
        return f"{title}\n\n{description}\n\n{url}", post_id
    else:
        return None, post_id
bot.polling()
py.user.next
vortex604
Попробовал добавить loguru, но файл все время пустой
Добавь сообщения, которые выводятся в журнал. Например, у тебя получилось подключиться и скачать данные - запиши это в журнал. Потом у тебя получилось разобрать данные - запиши это в журнал.

На первой странице есть примеры того, как выводить сообщения в журнал
https://loguru.readthedocs.io/en/stable/index.html
https://loguru.readthedocs.io/en/stable/overview.html#take-the-tour
vortex604
Получилось отловить такое:
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.bigsquidrc.com', port=443): Max retries exceeded with url: /category/news/new-products/ (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001F74E00E220>: Failed to establish a new connection: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера'))

Это сайт не доступен? Он понимает что его парсят и защиту включает?
AD0DE412
vortex604
Он понимает
ммм оно те место (site) это оно
py.user.next
vortex604
Это сайт не доступен? Он понимает что его парсят и защиту включает?
Убедись сначала, что у тебя с интернетом всё в порядке. Запусти какой-нибудь скрипт параллельно с этим скриптом, чтобы он обращался к другому сайту таким же образом. И поставь логирование для каждой операции, которое пишет в файл на диске.

vortex604
Он понимает что его парсят и защиту включает?
Они обычно ничего не включают, а покупают защиту у внешнего поставщика. Потестируй, есть ли там защита, сделав такой же скрипт, но который запускается раз в пять минут, и пусть он соединяется с сайтом там раз десять или двадцать. Если соединяется, то нет там защиты.
vortex604
Почему не сработала такая конструкция?
Опять словил ошибку (в pycharm она показывается), а в логе не отразилось…

     while True:
        try:
            page = requests.get(URL, headers=header)
            break
        except TimeoutError:
            logging.info("Нет коннекта")
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB