Ответы пользователя по тегу Python
  • Почему не получается авторизироваться через requests?

    @Romeo558 Автор вопроса
    Продолжающий программист на python.
    Я разобрался.
    В общем, совет всем кто пишет такие парсеры: Добавляйте больше заголовков!
    Этот сайт меня не пропускал, считая меня роботом только потому что какой-то заголовок не был указан. Я взял вот это за основу:

    headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Accept-Language': 'ru,en;q=0.9,en-GB;q=0.8,en-US;q=0.7',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Cookie': '_ym_uid=1676574290233522544; _ym_d=1676574290; DNSID=a058e0e7b3a7d65874158d1d0eac55f5da0061bf; HLP=4855814%7C%242y%2410%24ghilzoCbi4w1A04ImC1yh.Llg85UEDw2JdtsPIyEeCzpYNN%2Fa3eky; _ym_isad=2; _ym_visorc=b',
            'Origin': 'https://edu.tatar.ru',
            'Referer': 'https://edu.tatar.ru/login/',
            'Sec-Fetch-Dest': 'document',
            'Sec-Fetch-Mode': 'navigate',
            'Sec-Fetch-Site': 'same-origin',
            'Sec-Fetch-User': '?1',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58',
            'sec-ch-ua': '"Chromium";v="112", "Microsoft Edge";v="112", "Not:A-Brand";v="99"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '"Windows"'
        }


    И всё заработало прекрасно.
    Вот код, который я по итогу использовал:

    Код
    import requests
    from bs4 import BeautifulSoup
    import fake_useragent
    import time
    
    url = "https://edu.tatar.ru/login"
    url2 = "https://edu.tatar.ru/user/diary/week"
    login_data = {"main_login2": "", "main_password2": ""}
    ua = fake_useragent.UserAgent()
    
    # start_time = time.time()
    
    with requests.Session() as s:
        headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Accept-Language': 'ru,en;q=0.9,en-GB;q=0.8,en-US;q=0.7',
            'Cache-Control': 'max-age=0',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Cookie': '_ym_uid=1676574290233522544; _ym_d=1676574290; DNSID=a058e0e7b3a7d65874158d1d0eac55f5da0061bf; HLP=4855814%7C%242y%2410%24ghilzoCbi4w1A04ImC1yh.Llg85UEDw2JdtsPIyEeCzpYNN%2Fa3eky; _ym_isad=2; _ym_visorc=b',
            'Origin': 'https://edu.tatar.ru',
            'Referer': 'https://edu.tatar.ru/login/',
            'Sec-Fetch-Dest': 'document',
            'Sec-Fetch-Mode': 'navigate',
            'Sec-Fetch-Site': 'same-origin',
            'Sec-Fetch-User': '?1',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.58',
            'sec-ch-ua': '"Chromium";v="112", "Microsoft Edge";v="112", "Not:A-Brand";v="99"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '"Windows"'
        }
        s.post(url, data=login_data, headers=headers)
        diary_page = s.get(url2, headers=headers)
        soup = BeautifulSoup(diary_page.content, "lxml")
    
    # end_time = time.time()
    # result = end_time-start_time
    Ответ написан
    Комментировать
  • Как сделать чтоб бот реагировал например на слово "привет" не зависимо будет ли что то после него?

    @Romeo558
    Продолжающий программист на python.
    if "привет" in msg:
         #код

    Правда тут загвоздка.
    Этот блок срабатывает если в сообщении так или иначе есть слово "привет"
    Пример:
    Привет мир! (условие сработает)
    Мир, привет! (условие тоже сработает)

    Кто то обязательно напишет корректный ответ, но это одно из решений
    Ответ написан
    2 комментария
  • Как решить ошибку string indices must be integers?

    @Romeo558
    Продолжающий программист на python.
    Я наверное запоздал, да и проблему ты уже наверное решил, но решил необходимым поделиться своим вариантом решения с другими.
    Эта ошибка в данной библиотеке означает то, что токен более не действителен. Я не знаю почему это происходит, но это происходит.
    Чтобы точно убедиться что это всё от токена - попробуй запустить вот это:
    from yoomoney import Client
    
    token = "*******************************************************************"
    client = Client(token)
    
    history = client.account_info()

    Должна вывестись ошибка типа:
    yoomoney.exceptions.InvalidToken: Token is not valid, or does not have the appropriate rights

    И тут уже из ошибки понятно в чём проблема.

    Может быть это не единственное решение такой проблемы, но это помогло лично мне.
    Ответ написан
    Комментировать
  • Как использовать random.randint() в телеграм боте?

    @Romeo558
    Продолжающий программист на python.
    Используй переменную num в самой функции команды, то есть после @bot.message.handler. Так каждый раз будет случайное число
    И вообще зачем эти махинации с int и == ?
    просто if num1 == 1: и дальше тело условия.
    Усё.
    Ответ написан
    Комментировать
  • Почему не работает код python Email sender?

    @Romeo558
    Продолжающий программист на python.
    server = smtplib.SMTP("smtp.gmail.com", 587)
    Ты неправильно указал адрес сервера
    Ответ написан
  • Почему тут ошибка?

    @Romeo558
    Продолжающий программист на python.
    import time
    from random import randint
    
    for i in range(1, 45):
        print('')
    
    
    
    for i in range(1, 1000):
        s = ''
        count = randint(1, 100)
        while (count > 0):
            s  = ' '
            count -= 1
    
        if (i%10==0):
            print(s + 'С праздником Рамадан')
        else:
            print(s + '*')
            time.sleep(0.1)

    Нужен был отступ
    Ответ написан
    1 комментарий
  • Как с помощью библиотеки pyTelegramBotAPI сделать два ответа на вопрос бота?

    @Romeo558
    Продолжающий программист на python.
    import telebot
    import config
    import sqlite3
    
    bot = telebot.TeleBot(config.TOKEN)
    
    db = sqlite3.connect('bot_db')
    cursor = db.cursor()
    
    cursor.execute("""CREATE TABLE IF NOT EXISTS users(
        login text,
        password text
      )""")
    
    db.commit()
    
    @bot.message_handler(commands=['start'])
        msg = bot.send_message(message.chat.id, "Ок,  придумайте логин") #Что то типа заготовки.
        bot.register_next_step_handler(msg, reg)
    
    def reg(message):
       login = message.text
       msg = bot.send_message(message.chat.id, "Придумайте пароль")
       bot.register_next_step_handler(msg, pass_reg)
    #  cursor.execute(f"SELECT login FROM users WHEN login = '{login(message)}'")
    #  if cursor.fetchone() is None:
    #    cursor.execute("INSERT INTO users VALUES (?, ?)", (login(message), password(message)))
    #    db.commit()
    #
    #    bot.send_message(message.chat.id, 'Вы успешно зарегистрированы!')
    #  else:
     #   bot.send_message(message.chat.id, 'Такой пользователь уже существует!')
    def pass_reg(message):
       password = message.text
       bot.send_message(message.chat.id, "Вы успешно авторизованы!")
    bot.polling(none_stop=True)

    То есть нужно было добавить register_next_step_handler и добавить начальное сообщение
    Ответ написан
    Комментировать