Задать вопрос
  • Не понимаю почему код выводит пустой список?

    Vindicar
    @Vindicar
    RTFM!
    А ты запиши содержимое req в файл, всё сразу понятно станет...

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


    Популярные сайты парсить - не в носу ковырять, они от этого защищаются.

    EDIT:
    NaoFumi008, а причём тут твой браузер? Твой код сам выполняет запрос, браузер ему не нужен.
    Очень советую почитать про то, как вообще работает Web.
    Кратко

    Клиент (браузер или иная программа) делает HTTP запрос, посылая запрашиваемую часть URL и заголовки (в наиболее простом случае).
    Серверная часть отвечает на запрос тем или иным документом (например, просто текстом) и своими заголовками (что это за документ, его размер, устанавливаемые cookies, и т.д.).
    Клиент принимает документ и обрабатывает его. Так, браузеры находят в документе JS-скрипты и выполняют их.
    Эти скрипты могут выполнять дополнительные запросы, которые обслуживаются по тому же принципу.
    Сервер может сохранять сведения о запросах и сопоставлять их.

    Есть две основных точки проверки клиента: непосредственно заголовки запроса (например, передан ли Referer? Переданы ли соответствующие cookies? Похож ли на правду User-Agent? Переданы ли другие необязательные, но типовые заголовки, вроде Accept-Language?) и обработка скриптов клиентом. Скажем, если клиент сделал запрос на одну страницу, но скрипт на этой странице не сделал второй запрос - возможно, клиент не браузер, а бот. Стоит его запомнить и попытаться пометить.
    В твоём случае, скорее всего, отрабатывает первый сценарий, но ты можешь напороться и на второй тоже.

    Выхода два: либо пытаться методом проб и ошибок выяснить, что проверяет сайт (например, сделать запрос браузером, открыть панель разработчика и скопировать заголовки запроса целиком). Либо использовать "безголовый" браузер и пакет для управления им, вроде selenium. Первый вариант долгий, второй очень жадный на ресурсы. Ни один не даёт гарантии, так как selenium вроде всё же можно обнаружить.
    Ответ написан
    7 комментариев
  • Как сделать асинхронную многопоточность?

    Vindicar
    @Vindicar
    RTFM!
    Причём тут многопоточность вообще? -_-

    Если бот b знает, по какому пути лежит бот a и где в каталоге a лежит БД, он может подключиться, так как БД sqlite это просто файл - но только до тех пор, пока b туда ничего не пишет. И даже тогда есть риск, если a будет обновлять информацию в момент её чтения b. sqlite вообще не предназначена для одновременного доступа.
    Так что когда встаёт вопрос об одновременном доступе к БД, от sqlite лучше уходить в сторону полноценных серверных СУБД.

    Либо научи бота a отдавать требуемую информацию по запросу, скажем, через сокет. Если он написан на базе asyncio (или фреймворка который его использует), то это не так уж сложно. Тогда с БД будет работать только a, а b должен только знать, как подключиться к a.
    Ответ написан
    1 комментарий
  • Как задать значение по умолчанию для всех созданных combobox в Tkinter?

    Vindicar
    @Vindicar
    RTFM!
    По итогам ряда экспериментов у меня получилось следующее...

    Когда ты ставишь ссылку на переменную Tk (например, экземпляр StringVar) для элемента управления, элемент запоминает внутреннее имя этой переменной (если ты его не задал явно, оно будет иметь вид PY_VAR*), а не хранит ссылку на сам экземпляр класса StringVar. Поэтому переменная умирает, когда значение питоновской переменной value перезаписывается на следующей итерации, что ломает логику работы.
    Ты должен сам хранить ссылки на все StringVar на всё время жизни твоего окна. Например, так:
    variables = {}
    
    def s():
        unique_types = ['1', '2', '3', '4', '5']
        entry = {}
        label = {}
        combo_list = []
        types = ['Соответсвия нет', 'A', 'B', 'C']
    
        for row, name in enumerate(unique_types, 0):
            value = StringVar()
            variables[name] = value
            lb = ttk.Label(root, text=name)
            lb.grid(row=row, column=0)
            label[name] = lb
    
            combobox = ttk.Combobox(root, textvariable=value, values=types, width=90, state="readonly")
            combobox.current(0)
            combobox.grid(row=row, column=2, padx=10, pady=5)
            combo_list.append(combobox)
            entry[name] = combobox
    
        b = ttk.Button(root, text="Print all", command=lambda: print_all_entries(unique_types, entry, label))
        b.grid(row=row + 1, column=2, padx=10, pady=5)


    Одна из причин, почему я обычно советую описывать окно как класс-наследник tkinter.Frame. В конструкторе создаёшь переменные, сохраняешь в поля класса, и они лежат себе. Когда экземпляр класса умрёт, они тоже уничтожатся.
    А потом этот экземпляр пакуешь уже в окно верхнего уровня.
    Ответ написан
  • Как из Python отдать команды в PowerShell от имени администратора?

    Vindicar
    @Vindicar
    RTFM!
    Нужно, чтобы твой скрипт был запущен от имени администратора.
    Можно использовать команду runas, но она потребует пароль.
    Ответ написан
    Комментировать
  • Как направить вывод ошибок из консоли в файл?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри в сторону модуля atexit. Если падение прогарммы вызвано питоновским исключением, а не чем-то низкоуровневым, то это позволит сделать flush при выходе из программы.
    Ответ написан
  • Где ошибки в коде Python?

    Vindicar
    @Vindicar
    RTFM!
    print = (........)
    Читай, как правильно вызывать функции. Ты создаёшь переменную print, вместо того, чтобы вызвать функцию print().
    Ответ написан
    Комментировать
  • Почему после "apt-get upgrade -y" некоторые пакеты не обновляются?

    Vindicar
    @Vindicar
    RTFM!
    Проверь через apt-mark showhold, может, эти пакеты поставлены на удержание (hold)?
    Если так, на это наверняка есть причина.
    Ответ написан
    1 комментарий
  • Как вывести данные из бесконечного subprocess в python?

    Vindicar
    @Vindicar
    RTFM!
    output = proc.stdout.read()
    У read() есть параметр, сколько максимум данных принимать. Просто принимай данные в буфер по 1 КБ (или сколько удобно), режь на строки по разделителю (\n), обрабатывай принятые полные строки, но последнюю неполную строку сохраняй и добавляй в начало следующей порции.
    Ответ написан
    1 комментарий
  • Как получить информацию о сервере на python asyncssh?

    Vindicar
    @Vindicar
    RTFM!
    Библиотека тут ни причём, это вообще не её задача. Тебе нужно научиться выполнять команды, получать их выхлоп и парсить его.
    Если сервер на linux дистре, то uname -a, чтобы понять, на каком (для разных дистров команды могут чуть отличаться).
    Всё остальное - либо ищи псевдофайлы в /proc, либо используй соотв. утилиты, которые должны быть на сервере. Например, hwinfo.

    В предельном случае можешь попробовать найти статически слинкованный файл hwinfo, загрузить его во временный каталог на сервер, запустить, а потом удалить.
    Ответ написан
  • Можно ли подключиться к базе данных sqlite3, которая лежит на сервере?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3 требует доступ к файлу именно как к файлу. Так что тебе придётся подмонтировать каталог с базой к целевой машине, тем или иным способом. Под виндой скорее всего только webdav, под никсами вариантов больше.
    Ну и да, sqlite НЕ рассчитана на одновременный доступ, так что если с этой базой кто-то одновременно работает на сервере и на целевой машине, есть шансы что она поломается.
    Так что от "никакая другая" лучше отказаться при первой возможности.

    А для отладочных целей лучше скопировать базу и гонять скрипт на копии, чтобы не угробить "боевую".
    Ответ написан
    Комментировать
  • Получение доступа к регистру rip x86-64 архитектура?

    Vindicar
    @Vindicar
    RTFM!
    Если я не путаю, RIP (как и EIP в x86) нельзя ни читать, ни писать напрямую - только через команды передачи управления.
    Поэтому только косвенные приёмы, вроде вызова подпрограммы и чтения адреса возврата внутри стека, или получения адреса метки, расположенной как можно ближе к текущей инструкции - ну или более изящные способы, вроде использования относительной адресации. Смотри ответ jcmvbkbc.
    Ответ написан
    Комментировать
  • Почему программа выводит цифру 1 бесконечное множество раз, вместо одного?

    Vindicar
    @Vindicar
    RTFM!
    loop() запускается циклически, снова и снова.
    r - глобальная переменная, которая сохраняет значение между вызовами loop().
    Так что, как только ты задал r правильное значение - при последующих вызовах if (r.value == ...) будет отрабатывать каждый раз, пока значение r не сменится.
    Ответ написан
    Комментировать
  • Нужно сделать полную итерацию для проверки условного оператора перед тем как начать там проверять. Можно ли это продолжить через вложенные циклы?

    Vindicar
    @Vindicar
    RTFM!
    ну для начала, почему у тебя вложенный цикл j идёт до i+1, т.е. включает само число?
    во-вторых, почему ты не очищаешь mas для каждого нового i?

    в-третьих, почему ты делаешь проверку суммы массива множителей внутри цикла по j? Это как раз и даёт то поведение, которое ты наблюдаешь. Сумма проверяется после каждого множителя, а не для всех. Вот просто вслух проговорить, что делает программа - и уже бы заметил. Вынеси проверку из вложенного цикла.
    Ответ написан
  • Для чего перезагружать сайт с помощью тега?

    Vindicar
    @Vindicar
    RTFM!
    Некоторые горе-сайты реализуют через это редирект на заглушку "Как ты смеешь открывать наш божественный сайт без включенного JS?!". Скрипт чуть ниже быстренько удаляет этот тег, и в итоге он не отрабатывает. Но если скрипты отключены...
    Ответ написан
    Комментировать
  • Как найти окружности на изображении opencv python?

    Vindicar
    @Vindicar
    RTFM!
    Можешь попробовать фильтр Кэнни для поиска границ, и искать окружности по результату.
    Так или иначе, тебе потребуется получить изображение, где как можно чётче видны нужные тебе элементы, и как4 можно хуже - всё остальное.
    И да, в приведённом коде кривые отступы. он не запустится.
    Ответ написан
    Комментировать
  • Python. Цикл появления файлов txt на рабочем столе?

    Vindicar
    @Vindicar
    RTFM!
    1. Определить каталог рабочего стола. Например, pathlib.Path.home() / 'Desktop', но зависит от ОС и её версии.
    2. Сделать цикл
    3. В цикле сформировать имя файла, а потом открыть файл с этим именем.
    Ответ написан
    2 комментария
  • Как добавить звуковую дорожку в видео но чтобы старая звуковая дорожка осталась?

    Vindicar
    @Vindicar
    RTFM!
    Насколько я понимаю, выбранная тобой библиотека этого не умеет. Ты можешь сохранить обе дорожки в файл, и микшировать их с помощью ffmpeg (на который она всё равно опирается).
    Ответ написан
    Комментировать
  • Как рекурсивно обойти файлы?

    Vindicar
    @Vindicar
    RTFM!
    go(abs_path)
    Ты не возвращаешь ничего при рекурсивном вызове. Нужно сделать
    for subpath in go(abs_path):
        yield subpath

    или, что то же самое,
    yield from go(abs_path)
    Но вообще да, средства рекурсивного обхода уже есть, глянь их заодно.
    Ответ написан
    Комментировать
  • Python, VKBottle, SQL. Как ограничить доступ к команде на время?

    Vindicar
    @Vindicar
    RTFM!
    1. НИКОГДА не формируй запросы f-строками. Учись пользоваться parametrized queries. В твоём случае особого риска нет, но лучше сразу приучаться делать правильно.
    2. cursor.fetchone() ВСЕГДА возвращает кортеж, даже если ты запрашиваешь один элемент. В твоём случае это будет кортеж из одного элемента с индексом 0. Как работать с кортежами - гуглим.
    Ответ написан
    2 комментария