Я новичок в Python и застрял на том, что кажется простой проблемой. После месяцев ожидания я решил, что сдаюсь и напишу собственного бота, чтобы подарить своим детям PS5. но я сталкиваюсь с проблемами глубины стека.

Программа просто проверяет, доступен ли элемент, а если нет, обновляет ли страницу, и пытается снова. Но я бросаю исключение после 1000 звонков. Я искал способ очистить стек в Python, но ничего не нашел.

Я также пытался перезапустить программу, когда стек> 1000 с os. execv(). Но это вызывает ошибку формата Exec.

Ниже представлена ​​усеченная версия, в которой удалены все данные для входа в систему и настройки. Спасибо заранее за любую помощь!

def click_and_buy():
    try:
        print('trying to buy')
        buy_now = driver.find_element_by_xpath('//*[@id="buy-now-button"]')
        buy_now.click()
    except Exception as e:
        print(len(inspect.stack(0)))
        if len(inspect.stack(0)) < 5:
            click_and_buy()
            time.sleep(1)
        else:
            restart()


def restart():
    # os.system('ps5_bots.py')
    os.execv(__file__, sys.argv)


if __name__ == '__main__':
    click_and_buy()
0
Brooks Johnson 3 Май 2021 в 01:04

1 ответ

Лучший ответ

Рекурсия не подходит для бесконечных повторений. Это проблема x y.

Вместо этого сделайте метод итеративным, используя цикл while. В качестве альтернативы оберните метод другим, который будет вызывать цикл:

def click_and_buy():
    print('trying to buy')
    buy_now = driver.find_element_by_xpath('//*[@id="buy-now-button"]')
    buy_now.click()


def click_and_buy_repeated():
    while True:
        click_and_buy()


if __name__ == '__main__':
    click_and_buy_repeated()
3
flakes 2 Май 2021 в 22:26