ntramБлагодарю за напоминание!
ntramБлагодарю за напоминание!
FishHookВнес несколько изменений, добавил время ожидания ответа от сервера. Теперь он не вылетает, а просто останавливается. Работает, работает и просто останавливается. Не выдавая ошибок и т.д.
Evgen777вам надо:1. вынести цикл во вне функциилибо2. использовать какой-либо шедуллер
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait import time import requests from selenium.webdriver.firefox.options import Options import schedule from contextlib import suppress options = Options() options.headless = True serials = 0 OO = 0 def send_telegram(text: str): token = "5206239063:AAEHnaXjpFCeFB0FGRYNN0rQbQLR2MsGnsU" url = "https://api.telegram.org/bot" channel_id = "-1001418930581" url += token method = url + "/sendMessage" r = requests.post(method, data={ "chat_id": channel_id, "text": text }) if r.status_code != 200: raise Exception("post_text error") def scaning(): # running = True # while running: global serials dostup = requests.get("https://lotoclub.kz/") #with suppress(Exception): #if dostup.ok: try: with webdriver.Firefox(options=options) as driver: WebDriverWait(driver, 20) time.sleep(10) driver.get("https://lotoclub.kz/") time.sleep(10) datas = driver.find_element(By.CLASS_NAME, "gmcard__tirage-list-left") datas2 = driver.find_element(By.CLASS_NAME, "gmcard__tirage-list-num") numb = int(datas.text[2:9]) if serials == numb: driver.quit() else: send_telegram(datas2.text) print(datas2.text) driver.quit() serials = numb except: print("Повторное соединение") pass schedule.every(1).minutes.do(scaning) while True: schedule.run_pending() time.sleep(1) # print(OO + 1) # OO = OO + 1
FishHook
Evgen777пересмотрите свой подход к этой программе полностью. Напишите на питоне два скриптапервый: запускается, получает данные с lotoclub.kz/, парсит их, при этом логирует в файл важные этапы своего исполнения, сохраняет результат в SQLite и прекращает свою работувторой: запускается, проверяет есть ли новые результаты парсинга в SQLite, если там ничего нет - завершает работу, если данные есть он их извлекает, подготавливает и отправляет в телеграмм и завершает работу. При этом он, конечно, тоже логирует в файлзатем есть два вариантапервый: вы средствами ОС, например с помощью cron задаете расписание запуска обоих скриптов, скажем раз в минутувторой: вы пишите программу-таймер, которая в цикле запускает оба скрипта как отдельный процесс с помощью Popen. Она тоже логирует, что и в какой момент она запускает.
FishHook
1. Про память это вы сейчас ерунду сказали. 2. Это можно решить в один процесс. Но так как вы не можете ни отдебажить решение самостоятельно, ни скорее всего не знакомы с асинхронными фреймворками, я вам предложил самое простое и надёжное решение. Это на самом деле самый простой вариант и нифига сложного тут нет.3. Питон может осилить, это вы не можете