Ответы пользователя по тегу Python
  • Как редактировать сообщение после ввода пользователя?

    Denkuwus
    @Denkuwus
    15 y.o
    Можно использовать метод edit_message_text класса Updater:

    async def set_id(message: types.Message, state: FSMContext):
        id = message.text
        # Удалить сообщение пользователя
        await message.delete()
        # Редактируем сообщение бота
        await message.bot.edit_message_text(
            chat_id=message.chat.id,
            message_id=message.message_id,
            text='ник изменен'
        )
        # Завершить процесс
        await state.finish()


    Здесь метод edit_message_text используется для редактирования сообщения бота с текстом «ник изменен». Параметры chat_id и message_id используются для указания редактируемого чата и сообщения.
    Ответ написан
  • Как сделать так, чтобы selenium webdriver использовал мои аккаунты?

    Denkuwus
    @Denkuwus
    15 y.o
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    # Запустить браузер, я указал хром
    driver = webdriver.Chrome()
    
    # Перейти на страницу стим
    driver.get('https://steamcommunity.com/login/home/')
    
    # Найти элементы формы входа(ниже будет мини гайд)
    username_field = driver.find_element(By.ID, 'steamAccountName')
    password_field = driver.find_element(By.ID, 'steamPassword')
    login_button = driver.find_element(By.ID, 'SteamLogin')
    
    # Вводим свои данные
    username_field.send_keys('YOUR_USERNAME')
    password_field.send_keys('YOUR_PASSWORD')
    
    # Нажать на кнопку войти
    login_button.click()
    
    # Дождаться завершения процесса входа в систему
    # Возможно, придется настроить время ожидания в зависимости от скорости соединения
    time.sleep(5)
    
    # Сохранить куки
    cookies = driver.get_cookies()
    
    # Закрыть браузер
    driver.close()


    После того как куки были сохранены, их можно уже юзать для входа. Для этого можно использовать метод add_cookie класса webdriver.Chrome, чтобы добавить сохраненные файлы cookie в браузер перед переходом на нужную страницу.

    from selenium import webdriver
    
    # Запуск браузера
    driver = webdriver.Chrome()
    
    # Добавить наши сохраненные куки в браузер
    for cookie in cookies:
        driver.add_cookie(cookie)
    
    # Перейти на сайт
    driver.get('https://steamcommunity.com/market/')
    
    # Теперь при входе, страница должна быть авторизована


    Мини гайд на элементы форма входа:

    Открыть страницу входа в Steam в веб-браузере.
    Щелкнуть правой кнопкой мыши форму входа и выбрать «Проверить» или «Проверить элемент» в контекстном меню.
    Окно инструментов разработчика должно открыться и выделить выбранный элемент в HTML-коде.
    Найдите атрибут id элемента в коде HTML.

    Например, чтобы найти атрибут id поля имени пользователя, можно найти тег ввода, который представляет поле, и найти атрибут id в теге:

    <input type="text" class="input_text login_input_text" name="username" id="steamAccountName" placeholder="Username" tabindex="1">


    В этом примере атрибутом id поля имени пользователя является steamAccountName.

    И тем самым нужно использовать аналогичный процесс, чтобы найти атрибуты id других элементов формы входа, таких как поле пароля и кнопка входа.
    Ответ написан
    Комментировать
  • Как исправить логическую ошибку в коде?

    Denkuwus
    @Denkuwus
    15 y.o
    Можно попробовать немного изменить оператор if

    import random
    
    bombID = sorted(random.sample(range(0, 25), 5))
    
    for y in range(5):
         markup = []
    
         for x in range(5):
             idx = y * 5 + x
             if idx in bombID:
                 markup.append(f'bomb{idx}')
             else:
                 markup.append(str(idx))
         print(markup)


    Теперь оператор if должен быть истинным только в том случае, если текущий индекс (idx) является одним из чисел в списке bombID
    Ответ написан
    1 комментарий
  • Как изменить время из одного часового пояса в другой?

    Denkuwus
    @Denkuwus
    15 y.o
    Можно использовать либру pytz

    import pytz
    import datetime
    
    # Разобрать исходную строку даты
    mess_date = datetime.datetime.strptime("2023-01-02 18:01:23+00:00", "%Y-%m-%d %H:%M:%S%z")
    
    # Установить часовой пояс на UTC+5.
    tz = pytz.timezone("Etc/GMT-5")
    
    # Конвертировать время в новый часовой пояс
    mess_date_utc5 = tz.normalize(mess_date.astimezone(tz))
    
    # Формат даты в новом часовом поясе
    format_date = mess_date_utc5.strftime("%d-%m-%Y %H:%M")
    
    print(format_date)  # На выходе получится: "02-01-2023 18:01"


    Код сначала анализирует исходную дату функцией datetime.datetime.strptime(). Затем устанавливает часовой пояс в UTC+5, используя функцию pytz.timezone(). Затем время переводит в новый часовой пояс с помощью astimezone(), а дата форматируется с помощью метода strftime().
    Ответ написан
  • Python, как по части ключа JSON получить саму строку?

    Denkuwus
    @Denkuwus
    15 y.o
    Да
    import json
    
    # Загрузить данные JSON из файла или строки
    json_data = json.load(open('data.json'))
    
    # Перебрать ключи в данных JSON
    for key in json_data:
        # Проверить, содержит ли ключ определенную строку
        if 'specific_string' in key:
            # Получить саму строку
            string = key.split('specific_string')[1]
            print(string)


    Код загружает данные JSON из файла с именем data.json, а затем перебирает ключи в данных. Если ключ содержит строку 'specific_string', он разделяет ключ на эту строку и получает часть после строки. Выводя строку в консоль
    Ответ написан
  • Как найти записи за определенный используя в tortoise?

    Denkuwus
    @Denkuwus
    15 y.o
    Можно использовать метод .filter() в модели Activity и указать аргумент created_at__gte (больше или равно) с нужной датой.

    import datetime
    
    n_days_ago = datetime.datetime.now() - datetime.timedelta(days=n)
    activity_records = await Activity.filter(created_at__gte=n_days_ago).all()


    Он извлечет все записи Activity, в которых поле created_at больше или равно n дням назад.

    Можно еще юзать метод .filter() с другими операторами сравнения, такими как __lt (меньше чем), __lte (меньше или равно), __gt (больше чем) и __gte (больше или равно). Например, чтобы получить записи между двумя конкретными датами, можн использовать операторы __gte и __lt:

    start_date = datetime.datetime(2022, 1, 1)
    end_date = datetime.datetime(2022, 12, 31)
    activity_records = await Activity.filter(created_at__gte=start_date, created_at__lt=end_date).all()


    Благодаря этому можно получить все записи Activity, в которых поле created_at больше или равно start_date и меньше end_date.
    Ответ написан
    Комментировать
  • Как осуществить проверку о том, запущен ли стрим в данный момент на YouTube канале (без использования YouTube API V3)?

    Denkuwus
    @Denkuwus
    15 y.o
    Чтобы проверить, запущен ли в данный момент стрим на канале YouTube без использования API YouTube V3, вы можете использовать веб-скребок для очистки веб-сайта YouTube и проверки наличия индикатора «живой» на странице канала. Вот пример того, как это сделать с помощью библиотеки Beautiful Soup:

    import requests
    from bs4 import BeautifulSoup
    
    # Замените "CHANNEL_URL" URL-адресом канала YouTube
    url = "CHANNEL_URL"
    
    #Сделать запрос на страницу YouTube канала
    response = requests.get(url)
    
    # Разобрать HTML-контент страницы
    soup = BeautifulSoup(response.content, "html.parser")
    
    # Проверить наличие индикатора «живой»
    if soup.find("yt-live-now-live-badge-renderer"):
        print("The stream is currently live.")
    else:
        print("The stream is not currently live.")


    В этом примере библиотека запросов используется для отправки запроса на страницу канала YouTube, а библиотека BeautifulSoup используется для анализа HTML-содержимого страницы. Затем функция поиска используется для поиска наличия «живого» индикатора, который представляет собой элемент с тегом yt-live-now-live-badge-renderer. Если элемент присутствует, это означает, что стрим в настоящее время активен

    Хочу отметить, что веб-скрапинг регулируется условиями использования анализируемого веб-сайта и может быть разрешен не во всех случаях. Вы также должны знать, что структура HTML-контента веб-сайта YouTube может со временем меняться, что может привести к поломке парсера

    Поэтому я все же порекомендовал бы использовать более надежный метод в виде YouTube API V3
    Ответ написан
    Комментировать