Профиль пользователя заблокирован сроком с 12 апреля 2022 г. и навсегда по причине: спам
Ответы пользователя по тегу Python
  • Как реализовать викторину телеграмм боту?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Создаёте БД с колонками:
    id ,вопрос, правильный ответ, неправильный ответ
    Создаёте callback-кнопку, при нажатии на которую вытягиваются все вопросы из БД и 1 случайный из них выводите пользователю, выглядит примерно так:
    questions = db.execute('SELECT * FROM QUESTIONS')
    question = random.choice(questions)

    Что-бы избежать повторения вопросов лучше создать таблицу с пользователями, куда будут заноситься id вопросов на которые пользователь дал ответ, тогда нужно будет делать запрос к ней и брать данные из таблицы с вопросами с учетом данных ответов:
    answered_ids = db.execute('SELECT answered_ids FROM USERS WHERE (user_id IS ?)', (callback_query.from_user.id,))
    questions = db.execute('SELECT * FROM QUESTIONS WHERE id != IN(?)', (answered_ids,))
    Ответ написан
    Комментировать
  • Как исправить ошибку 'set' object has no attribute 'get' в телеграм боте?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    apihelper.proxy = {'http': 'http://88.204.154.155:8080'}

    Как вообще вы пришли к тому, что-бы ставить открывающие кавычки " а закрывающие '?
    Ответ написан
    Комментировать
  • Как можно ужать код Python (if)?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    years = [year2013, year2014, year2015]
    for year in years:
        if year.value != 0:
            i += 1
        else:
            pass
    Ответ написан
    8 комментариев
  • Как здесь работает переменная "i"?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    В i хранится элемент текущей итерации, её не нужно создавать заранее.
    Ответ написан
    Комментировать
  • Как правильно отправить post запрос?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    import json
    
    data = {"query": "...", "variables": "..."}
    headers = {
        "Accept": "application/json",
        "Content-Type": "application/json"
    }
    response = requests.post(url, data=json.dumps(data), headers=headers)

    Указывайте все параметры которые есть в Requests Headers и Requests Payload. И вы уверены что вам нужен именно post? Может requests.get() попробуете?
    Ответ написан
    7 комментариев
  • Как получить результат выполнения SQL запроса в Python?

    kshnkvn
    @kshnkvn Автор вопроса
    yay ✌️ t.me/kshnkvn
    Судя по оф. документации такой функции нет и единственный способ - это что-то такое:
    if db.total_changes > 0:
        print('Insertion category {} with sub_category {} complete'.format(value, categories[index]))


    Или я ошибаюсь?
    Ответ написан
    Комментировать
  • Selenium. Почему не срабатывает кнопка?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Попробуйте:
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    
    caps = DesiredCapabilities().FIREFOX
    caps['pageLoadStrategy'] = 'eager'
    driver = webdriver.Firefox(desired_capabilities=caps)

    Вероятнее всего по какой-то причине у вас не грузятся некоторые элементы сайта, а Selenium не начнет работу пока не будет произведена полная загрузка страницы. pageLoadStrategy позволяет определить стоит дожидаться полной загрузки, или нет.
    Ответ написан
    6 комментариев
  • Не получается сделать time.sleep(). Что делать?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Вам нужно читать файл так:
    with open('accounts.txt', 'r', encoding="utf8") as file:
        lines = file.read().split('\n')

    Функция readlines() оставляет в конце строки \n который воспринимался как нажатие Return и происходит это, соответственно, до того как будет поставлена галочка чек-бокса.
    Ответ написан
  • Как сделать нажатие кнопки по координатам Selenium?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    checkboxes = driver.find_elements(By.XPATH, '//input[@type="checkbox"]')
    for box in checkboxes:
        try:
            box.click()
        except Exception:
            pass

    5d3dc70b22626828660069.jpeg
    Ответ написан
  • Python учитывает табуляцию в условиях?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Да. Перед тем как программировать на каком-то языке, неплохо было-бы хотя-бы его синтаксис выучить.
    Ответ написан
  • Копируется ли словарь при импорте?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    непосредственном передастся сам словарь?

    Да.
    dict_for.py:
    test_dict = {'a': 'b', 'c': 'd'}
    print(id(test_dict))

    dict_import.py:
    import dict_for
    
    from dict_for import test_dict
    print(id(test_dict))

    PS D:\Dropbox\Develop\all_tests> python dict_import.py
    9434768
    9434768

    Вот, если что еще и вывод адреса в памяти:
    print(hex(id(test_dict)))
    PS D:\Dropbox\Develop\all_tests> python dict_import.py
    0xb4bd20
    0xb4bd20
    Ответ написан
    Комментировать
  • Как заставить функции работать одновременно?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    def w():
       for i in range(1, 5):
          print("q")
          print(i,"w")
         
    
    def w1():
       for i in range(1, 5):
          print("q1")
          print(i,"w1")
       
          
    def main():
       Thread(target=w).start()
       Thread(target=w1).start()
    
    main()

    This is console module
    q
    1 w
    q1
    q
    1 w1
    2 w
    q1
    q
    2 w1
    3 w
    q1
    q
    3 w1
    4 w
    q1
    4 w1


    target=w() - так вы вызываете функцию, соответственно ждёте пока она не отработает.
    continue вам нигде не нужен, цикл и без них будет итерироваться.
    Последний блок while будет бесконечно порождать потоки и очень скоро скрипт умрёт.
    Ответ написан
  • Какие могут быть способы определения автоматизации Selenium?

    kshnkvn
    @kshnkvn Автор вопроса
    yay ✌️ t.me/kshnkvn
    Перепробовал кучу разных вариантов, вот что из них может сработать для кого-то (не для меня):
    1. Очень сомнительно, но некоторые люди пишут, что для них это работало:
    Изменение название переменной документа js, используемой Selenium - $cdc_. Для этого достаточно открыть файл chromedriver.exe в любом шестнадцатеричном редакторе (я использовал HxD) изменить её название на любое другое. Это не сработало для меня, но сам chromedriver работает нормально после этого. Так-же я пробовал изменить все переменные где есть слова driver, но это была плохая идея - chromedriver перестал запускать. Без изменения исходников тут точно не обойтись, но я не уверен что это может сработать.
    2. Это более действующий вариант, который даёт хоть какой-то результат. На этой странице можно определить используется chromedriver, или нет и при запуске этой страницы через selenium действительно отображается, что используется webdriver. Добавление следующего куска кода помогло обойти эту идентификацию:
    options.add_experimental_option("excludeSwitches", ['enable-automation'])

    Но это всё-равно не помогло мне.
    Так-же нашел очень сомнительное и вероятнее всего просто нерабочее решение:
    Запуск js-кода, который меняет состояние переменных navigator, включая navigator.webdriver.
    Так он запускается:
    driver.execute_script("var s=window.document.createElement('script'); s.src='javascript.js';window.document.head.appendChild(s);")

    Сам js-код
    // overwrite the 'languages' property to use a custom getter
    const setProperty = () => {
        Object.defineProperty(navigator, "languages", {
            get: function() {
                return ["en-US", "en", "es"];
            }
        });
    
        // Overwrite the 'plugins' property to use a custom getter.
        Object.defineProperty(navigator, 'plugins', {
            get: () => [1, 2, 3, 4, 5],
        });
    
        // Pass the Webdriver test
        Object.defineProperty(navigator, 'webdriver', {
          get: () => false,
        });
        callback();
    };
    setProperty();

    Ерунда в том, что в Chrome вообще отсутствует переменная navigator.webdriver, в этом можно убедиться вводом navigator в консоли браузера, её там нет. Зато эта переменная есть в Firefox, но этот код её не меняет, т.е. он просто ничего не делает, значение переменной Firefox navigator.webdriver всегда равно true при запуске через selenium. В обычном (ручном) режиме она false.

    UPD. Не знаю, как проглядел, но в конечном итоге всё уперлось в проверку reCAPTCHA v3. Эта проверка проходится практически всегда при следующих условиях:
    1. Не используется User-Agent.
    2. Не используется прокси.
    3. Не отключаются уведомления.
    4. Не блокируются запросы на разрешения.
    4. Используется вот этот параметр:
    options.add_experimental_option("excludeSwitches", ['enable-automation'])

    Но при таких параметрах зарегистрировать более одного раза с одного IP не представляется возможным. Как я и указывал в своём вопросе - прокси использовал совершенно разные - от паблик до микро-серверов google cloud, так что дело не в "качестве" прокси а сугубо в факте его использования.
    Ответ написан
    Комментировать
  • Как составить план обучения и практики Python?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Читайте книги - пишите код. Всё. Не нужно никаких планов. Все эти "что мне учить, как мне учить, когда мне учить" и пр. - это всё отмазки лишь бы ничего не делать. Вы либо учите, либо нет.
    Ответ написан
    6 комментариев
  • Как сделать проверку на наличие записи в базе данных (SQLite)?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    cursor = db.execute('SELECT * FROM table_name WHERE (id IS ? AND name IS ?)', (id, name))
    row = cursor.fetchone()
    if row is None:
        cursor = db.execute('INSERT INTO table_name (id, name) VALUES (?,?)', (id, name))
        db.commit()
    Ответ написан
    1 комментарий
  • Почему выдает ошибку в for event in longpoll.listen():?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Проверьте версию Long Poll API в настройках группы, поставьте самую последнюю (5.90, вроде-бы).
    Ответ написан
  • Vk Api python бот. Как исправить ошибку с VkBotLongPoll и VkBotEventType?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    [100] One of the parameters specified was missing or invalid: longpoll for this group is not enabled

    Зайди в настройки группы > API > Long Poll API > включить > выберите типы событий, которые будете использовать.
    Ответ написан
  • AsyncIO python как не ждать ответ от функции?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Для вашей задачи лучше подойдут потоки.
    from time import sleep
    from threading import Thread
    
    
    def first():
        sleep(3)
        print(2)
    
    
    def second():
        sleep(3)
        print(1)
        
    
    def main():
        Thread(target=first).start()
        Thread(target=second).start()
        print("Продолжаем")
    
    
    main()


    PS D:\Dropbox\Develop\all_tests> python threads.py
    Продолжаем
    1
    2
    Ответ написан
    8 комментариев
  • Упаковка функции в строку, и обратно....?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    >>> def a():
    ...     print(True)
    ...
    >>> def b(func):
    ...     funcs = {'a': a()}
    ...     funcs[func]
    ...
    >>> b('a')
    True
    >>>

    Вы не потеряете производительность при вызове функции из словаря и на глаз вы точно не сможете определить где прямой вызов, а где из словаря.
    Уменьшать кол-во чтений хорошо тогда, когда их десятки, а то и сотни тысяч - в остальных случаях просто забейте. Когда у вас будет достаточно опыта и знаний вы сами будете прекрасно понимать где, как и что можно оптимизировать. До этого - просто пишите код и пробуйте. Любое решение хорошо, если оно работает так, как задумывалось, остальное - фантики.
    Ответ написан
    Комментировать
  • Как сравнивать None Python и NULL SQLite?

    kshnkvn
    @kshnkvn Автор вопроса
    yay ✌️ t.me/kshnkvn
    Решил проблему заменой оператора = на IS
    SELECT * FROM MATCHES WHERE (a IS ? AND b IS ? AND c IS ?)', (a, b, c)
    Ответ написан
    Комментировать