Форум сайта python.su
Господа форумчане.
Посмотрите в чем проблема.
Написал небольшой парсер. Сайт динамический поэтому нужно на него заходить для получения информации.
Работает 1 час примерно и вылетает.
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 options = Options() options.headless = True serials = 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/") if dostup.ok: with webdriver.Firefox(options=options) as driver: WebDriverWait(driver, 20) driver.get("https://lotoclub.kz/") 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: time.sleep(15) driver.quit() scaning() else: send_telegram(datas2.text) print(datas2.text) time.sleep(20) driver.quit() serials = numb else: driver.quit() scaning() scaning()
Офлайн
Evgen777
У вас в функции бесконечная рекурсия. Каждый вложенный вызов функции создает новый фрейм на стеке, рано или поздно стек заканчивается - это знаменитый стековерфло. Почитайте про то, как работают функции, гуглить по словам “стек вызовов”
Отредактировано FishHook (Июнь 20, 2022 13:09:08)
Офлайн
Evgen777
вам надо:
1. вынести цикл во вне функции
либо
2. использовать какой-либо шедуллер
Офлайн
FishHookСпасибо Вам большое за подсказку. Шедуллер наверное самое ОНО!
шедуллер
Офлайн
VANISHED
Отредактировано ntram (Окт. 13, 2022 15:37:28)
Офлайн
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(): global serials dostup = requests.get("https://lotoclub.kz/") with suppress(Exception): with webdriver.Firefox(options=options) as driver: WebDriverWait(driver, 20) time.sleep(1) driver.get("https://lotoclub.kz/") 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 schedule.every(1).minutes.do(scaning) while True: schedule.run_pending() time.sleep(1)
Офлайн
Запустите скрипт и отключите сеть. Остановится сразу?
Офлайн
ZerGДа выдало ошибку
Запустите скрипт и отключите сеть. Остановится сразу?
conn = connection.create_connection(
Офлайн
VANISHED
Отредактировано ntram (Окт. 13, 2022 15:37:35)
Офлайн