Ответы пользователя по тегу Python
  • Как создать скрипт, который заходит на сайт и нажимает на кнопку каждый час?

    @rPman
    Для тех кому очень сложно программировать но есть минимальное понимание этого можно использовать плагин tempermonkey который инжектит пользовательский скрипт на сайт по ссылке или ее маске, а там нужна пара строчка вида:
    document.querySelector('css selector').click(); // кликнуть на кнопку
    setTimeout(()=>window.close(),3000); // закрыть окно через 3000 миллисекунд

    css selector определяется тупым копированием (в большинстве случаев) из инспектора (правая кнопка на элементе, инспектировать, правая кнопка на элементе в инспекторе, копировать как...)

    теперь достаточно раз в час (например через планировщик задач) запускать браузер с нужной ссылкой, он будет открываться, жать нужную кнопку и завершать работу, автоматически, в параметрах можно указать выделенный профиль, тогда браузер будет запускаться, не затрагивая уже запущенный под основным профилем, а так же указать чтобы он запускался минимизированным
    Ответ написан
    Комментировать
  • Как обработать ssh-вывод построчно с помощью Python?

    @rPman
    Не очень эффективный путь но простой - запускаешь ssh xxx@yyy cat /path/log/file > temp_file ждешь окончания и читаешь полученный файл temp_file. тут cat это программа на сервере, выводит в stdout содержимое файла, но можно прямо на сервере часть обработки запускать используя grep/sed/awk/..

    сложнее, берешь какой-нибудь модуль для работы с ssh или scp для python, я не пробовал но гуглится много, например, и работаешь с выводом ssh напрямую.

    Так же можно попробовать вызывая subprocess подключаться к потокам и обрабатывать вывод, не сохраняя (я так делал на php, есть подводные камни на windows машинах, если не wsl), вроде гуглится что не всегда все работает как хочется, но если просто подключиться и об
    Ответ написан
    Комментировать
  • Почему скрипт не понимает, что данные в MySql изменились?

    @rPman
    код, который обновляет данные случайно не начал транзакцию и не завершил ее?
    Ответ написан
  • Парсер OZON выдает пустой список в таблицу Excel, в чем проблема кода?

    @rPman
    Проверь, что тебе вернул BeautifulSoup, есть ли в его ответе нужные div и a.
    Вполне возможно что наименования классов изменились, или в ответе нет в принципе товаров, например стоит защита от таких парсеров либо код html формируется в браузере скриптом а не на сервере и т.п.

    Настоятельно рекомендую не мучиться, и работать с полноценным браузером (например selenium или инжектить скрипт в обычный браузер плагином типа greasemonkey) а не такими примитивными техниками как BeautifulSoup, тогда тебе будет не важно, как защищается площадка (почти, существуют способы защиты и от этого), в конечном счете ты должен будешь симулировать поведение обычного пользователя на обычном браузере, выдерживать паузы, возекать и кликать мышкой и прочее.
    Ответ написан
    Комментировать
  • Как подсчитывать на видео проходящих людей по головам?

    @rPman
    Боюсь ты не найдешь готовых решений
    Мало того, тут нужно искать размеченный датасет голов людей и радоваться этому богатству

    Решение для тебя - берешь несколько сотен тысяч видео (разные времена года), нанимаешь десяток человек в помощники и садишься размечать, затем берешь готовые решения по нейронкам, арендуешь на недельку себе кластер с gpu или на месяц другой игровую видеокарту и вперед с примерами от pytorch пилишь результат.

    Теперь советы - прежде чем работать с нейронкой, попробуй другие решения, например благодаря тому что видеокамеры у тебя не двигаются, ты можешь получать объекты через разницу дефолтной картинки и текущей (так же можно просто считать по каждому пикселу гистограмму частоты значения интенсивности во времени (лучше брать HSV а не RGB) и вычитать из текущего изображения те цвета, что дольше всего на видео (осторожно в час пик магазин может часами быть битком забитый), добавляешь сюда алгоритмы локального детекта движений (строится карта векторов по всему изображению), т.е. ты можешь с высокой точностью детектировать кусок кадра на основе видео (несколько соседних кадров) который однозначно можно считать человеком (или несколькими), и вот уже вырезая их ты можешь начинать разметку видео для нейронки

    p.s. после того как ты на все это портатишь от нескольких сотен тысяч рублей до миллионов, к тебе подойдет такой же как ты сейчас и скажет, а дай мне готовые веса твоей нейронки... куда ты его вежливо пошлешь?
    Ответ написан
    1 комментарий
  • Что требуется что бы AnyDesk отображал экран игры вместо рабочего стола?

    @rPman
    даже steam remote? который заточен на трансляцию именно игр.

    есть лайфхак, если игру запустить в оконном режиме, все инструменты копирования экрана начинают работать как ожидается, а дальше, если игра это не поддерживает, ищем любые утилиты отключения у окна игры бордюров и заголовков и изменения размера до максимального (т.е. оконный полноэкранный режим)
    Ответ написан
    Комментировать
  • Как можно сделать виртуальную «флешку», которая будет отображаться в проводнике windows 10?

    @rPman
    Аналог linux-овму fusefs, но для windows - winfsp.dev
    Но он на c++!

    чтобы завести это на питоне, нужно писать прослойку, немного устаревшая статья но идея та же (в статье описаны обоа направления python -> c++ и c++ -> python)
    Ответ написан
    Комментировать
  • Шанс выпадения на python?

    @rPman
    если шансы выбора файла одинаковые и ты можешь переименовывать файлы, сделай имена файлов - числами
    тогда код станет совсем простым
    num=random.randint(1,10) # от 1 до 10 включительно
    filename=str(num)+'.png' # просто пример имени файла 1.png
    Ответ написан
    Комментировать
  • Как запустить выполнение асинхронной функции с определенной частотой выполнения?

    @rPman
    await asyncio.sleep(1.0 / MESSAGE_REPLY_RATE)
    нужно добавлять в тело цикла, после tasks.append(task), добавив await

    тебе ведь нужно не создавать новые task чаще чем указанная частота, вот и создавай их с интервалом.
    Ответ написан
  • Как с помощью Python записать "внутренний" звук компьютера?

    @rPman
    На windows в устройствах должно присутствовать что то типа StereoMix (панель управления - звуки - запись). В этом случае его можно выбрать вручную как устройство по умолчанию, либо средствами pyaudio выбирать как источник звука.

    Иначе средства еще есть (OBS как то звуки записывает) но сомневаюсь что этот функционал доступен из python.
    Ответ написан
    Комментировать
  • Кто сможет Объяснить код объясните его пожалуйста?

    @rPman
    вот что ответил ChatGPT с переводом от deepl
    Этот код считывает входные данные из стандартного потока ввода (stdin) и перебирает каждую строку с помощью цикла for. Для каждой строки он делает следующее:

    Используется метод strip() для удаления из строки пробельных символов, идущих впереди или позади.
    С помощью метода capitalize() первая буква строки пишется заглавной, а остальные буквы делаются строчными.
    Используется f-строка для форматирования строки в строку, заключенную в двойные кавычки и сопровождаемую символом новой строки.
    Полученная строка печатается в стандартный поток вывода.

    Другими словами, этот код берет каждую строку ввода, выводит первую букву, а затем печатает ее, заключая в двойные кавычки и сопровождая символом новой строки. Например, если входные данные имеют вид:

    привет мир
    как дела

    Выходные данные будут такими:
    "Привет мир\n"
    "Как дела\n"
    Ответ написан
    Комментировать
  • Как спарсить информацию с динамического сайта на python/js?

    @rPman
    забрось ты эти попытки симуляции поведения браузера
    потратишь времени вагон, а потом разработчики сайта что то подправят и тебе снова анализировать код

    запускай полноценный браузер, симулируй клики пользователя, способов миллион, от инжекта javascript на страницу нормально запущенного браузера и прередачи информации через http до полноценных библиотек типа selenium
    Ответ написан
    6 комментариев
  • Вопрос про многопоточность python, что лучше, больше ОЗУ или больше ядер?

    @rPman
    На сколько мне известно, популярные библиотеки telegram - асинхронные, т.е. многопоточность в них используется только для реализации асинхронности обработки соединений на уровне питона, а значит вероятность того что твой код упрется в потолок производительности ядер по ним практически нулевая, даже тупой сетевой hello world на питоне оказывается неожиданно очень медленным.

    Т.е. скорее всего тебе хватит двух ядер даже в худшем случае.

    p.s. оперативная память - это то что любит питон, будет жрать как не в себя, поэтому если это прямо сейчас надо решать - бери больше оперативной памяти

    Но правильно - брать больше ресурсов именно в тот момент, когда это действительно нужно, а стартовую оценку нужно брать с тестов своего кода на основе текущего размера своей аудитории и их активности.

    p.p.s. тут недавно человек спрашивал про проблемы нагруженного бота (он зачем то удалил вопрос, не помню какая библиотека была), там из-за ошибки в реализации библиотеки на каждое новое сообщение выдавался запрос одного последнего сообщения через тяжелый запрос поиска сообщений от и до (указывался один и тот же id), при этом библиотека была не асинхронная, при большой нагрузке бот отправлял 100500 таких запросов и сервер отказывал в обработке... т.е. первое о чем нужно беспокоиться в нагрузке - это вот такие баги а не нехватка сервера

    в нормальной ситуации, даже большое telegram сообщество сможет обработать слабейшая малинка.
    Ответ написан
    Комментировать
  • Как можно изменить код, чтобы он работал быстрее?

    @rPman
    Не уверен что данный код можно как то ускорить
    Например можно сменить python на nuitka и компилировать бинарник из получаемого им c++ кода, вот такие простые вещи там однозначно могут быть быстрее, особенно если вручную ковырять
    Как частный случая - написать критичный кусок кода на c++/c и вызывать его из питона, но сразу скажу что если по тупому заменить этот кусок на код си, никакого ускорения не получится, может даже ухудшение.

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

    Поясни главную задачу, зачем у тебя исходный массив в виде двумерного числового, когда к примеру подошел какой-нибудь битмап (не уверен что это было бы быстрее но попробовать)? Почему надо генерировать итоговый массив таким? куда пойдут эти 3 числа, это описания RGB colors? а потом они все будут инициализироваться?
    Ответ написан
    Комментировать
  • Как сохранять переменные без БД в python?

    @rPman
    Не надо избегать баз данных, они решают сразу миллион проблем

    Но если у тебя нет многопоточности, маленькие объемы то храни в файлах, сериализуя свои данные чем нравится, например последнее десятилетие люди полюбили json (до этого xml был), читабельно человеком, жмется хорошо, достаточно быстрые сериализаторы, универсально и всеми поддерживаются. При запуске кода читай файл в память, десериализуя, а при изменении данных и/или завершении скрипта сериализуй все и пиши обратно. Одно из развития подхода - пиши не в один файл а во много по объектам, воспринимай файловую систему как key->value базу данных (кстати вполне быструю).

    Чуть правильнее - изучи что то типа protobuf, отличная библиотека и идеология, описываешь форматы данных и работаешь с буфером, а код сериализации и десериализации офень эффективно генерируется тулчейном. В простом случае это будет один из способом сериализации данных, но можно допилить подход по хранению множества объектов в одном файле.... нужны очень веские причины чтобы велосипед изобретать.
    Ответ написан
    Комментировать
  • Словарь или БД?

    @rPman
    Если данные обрабатываются отдельно, то самая быстрая реализация - записывать в файл в своем формате (даже если это будет построчно сериализованные json), обязательный flush после записи (кеш кстати можно отключить). Индекс строить в оперативной памяти в виде словаря (key->смещение в файле+размер или сами данные, если влезают). При перезапуске приложения после сбоя, файл перечитывается, индекс в памяти заполняется заново. Этот вариант подходит для случаев, когда параллельная аналитика уменьшает объем данных в этом файле, перенося их в базу данных (в этом случае нужно параллельно обновлять индекс в памяти основного приложения и при его перезапуске учитывать что именно читать из файла а что нет), один из способов реализации уменьшения размера файлов - хранить его кусками от времени, удаляя старые (при этом нужные данные повторно отправлять в систему, в общем дальше от задачи).

    Решение с таким лог-файлом (или несколькими, например по одному на процесс/поток/ноду, тогда не понадобится синхронизация записи) и индексом в оперативной памяти будет давать считанные миллисекунды на операцию (упираться все будет в iops диска), если совсем труба, исключай файловую систему и пиши прямо в блочное устройство (выгадаешь еще 3х-10х ускорения)

    Если хочется базу данных - бери что то типа mysql с отключенными транзакциями (myisam), и очень грамотно составленными индексами и партицированием (может даже самодельным). Большее количество задержек вносят именно индексы.

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

    p.s. когда то давно я писал что то подобное, диск был медленный hdd но так как с него не было чтений, только записи на случай сбоя, а все данные были в оперативной памяти, скорость была огромной, десяток тысяч операций на очень слабом тогда железе
    Ответ написан
    Комментировать
  • Как спарить данные с динамического сайта?

    @rPman
    Что не получается то?
    у тебя 2 пути, реверсить логику сайта либо работать с итоговым результатом прямо в браузере, симулируя клики и движения мыши.

    Второй способ проще но кушает ресурсы (для параллельных запросов несколько браузеров запускать), инструментов тьма, от штатного браузера и его отладочной консоли (тупо туда код пишешь) до готовых проектов по управлению браузера типа selenium
    Ответ написан
    Комментировать
  • Как разбить json файл на несколько файлов по 5000 символов?

    @rPman
    500кб очень маленький объем, загружаешь и парсишь локально в своем скрипте весь файл, затем полученный массив в цикле собираешь во временный, сохраняя его в файл при достижении какого то лимита, например по количеству объектов (можно точнее по размеру json но это медленнее)
    Ответ написан
  • Как избавиться от большого количества конструктий if-else?

    @rPman
    Это нормально.
    И да, много это не 2-3 уровня а сотни и тысячи.

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

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

    @rPman
    Все способы хороши, да и тупой while sleep и более умный готовый event loop с асинхронными библиотеками.

    Часто все завязано на способе проверки, если хватит http запроса то да, приложение из 4 строчек сможет решить задачу

    вся дальнейшая возня как все это собрать и настроить чтобы на машине запускалось, многим не нравится 100500 приложений в фоне и стараются по максимуму в один процесс запихнуть, лично я не вижу ничего в этом такого, просто мониторить надо все запущенное

    p.s. бывает информацию о новых постах можно получать по websocket (сам пост обычно тем же http reast забирают но сайты могут выдавать сообщение клиентам через сокеты), соответственно пилишь клиент вебсокет который вместо периодических опросов будет максимально оперативно принимать сообщение от сервера
    Ответ написан
    Комментировать