Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2022 11:19:25

Evgen777
Зарегистрирован: 2022-06-20
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

Господа форумчане.
Посмотрите в чем проблема.
Написал небольшой парсер. Сайт динамический поэтому нужно на него заходить для получения информации.
Работает 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()

Задача у кода такая.
Зайти на сайт проверить если номер серии поменялся (номер розыгрыша) тогда отправить в телегу выпавшее число.
Сайт который отслеживаю - розыгрыш лото. Проходит примерно каждую минуту - полторы.
Поэтому нужно довольно часто обращаться к сайту.

Офлайн

#2 Июнь 20, 2022 11:38:07

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

Evgen777
У вас в функции бесконечная рекурсия. Каждый вложенный вызов функции создает новый фрейм на стеке, рано или поздно стек заканчивается - это знаменитый стековерфло. Почитайте про то, как работают функции, гуглить по словам “стек вызовов”



Отредактировано FishHook (Июнь 20, 2022 13:09:08)

Офлайн

#3 Июнь 20, 2022 11:41:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

Evgen777
вам надо:
1. вынести цикл во вне функции
либо
2. использовать какой-либо шедуллер



Офлайн

#4 Июнь 20, 2022 18:04:44

Evgen777
Зарегистрирован: 2022-06-20
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

FishHook
шедуллер
Спасибо Вам большое за подсказку. Шедуллер наверное самое ОНО!
Да и на будущее расширяет кругозор.
Спасибо еще раз.

Офлайн

#5 Июнь 20, 2022 22:41:18

ntram
Зарегистрирован: 2022-06-19
Сообщения: 75
Репутация: +  3  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

VANISHED

Отредактировано ntram (Окт. 13, 2022 15:37:28)

Офлайн

#6 Июнь 22, 2022 21:25:05

Evgen777
Зарегистрирован: 2022-06-20
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

ntram
ты токен бота спалил)
Это тестовый бот. Никакой полезной, ценной, секретной информации в нем нет.

Офлайн

#7 Июнь 22, 2022 21:27:22

Evgen777
Зарегистрирован: 2022-06-20
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

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)

Офлайн

#8 Июнь 22, 2022 21:47:57

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

Запустите скрипт и отключите сеть. Остановится сразу?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Июнь 22, 2022 22:21:43

Evgen777
Зарегистрирован: 2022-06-20
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

ZerG
Запустите скрипт и отключите сеть. Остановится сразу?
Да выдало ошибку
 conn = connection.create_connection(

Офлайн

#10 Июнь 22, 2022 22:25:06

ntram
Зарегистрирован: 2022-06-19
Сообщения: 75
Репутация: +  3  -
Профиль   Отправить e-mail  

Работает час и вылетает... подскажите.

VANISHED

Отредактировано ntram (Окт. 13, 2022 15:37:35)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version