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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    - Cron (linux и macos).
    - Task Scheduler (windows).
    - Schedule python library (открыть csv, циклом пройтись по строкам, получить значение из ячейки со временем и запустить schedule).

    Первые 2 решения в приоритете.
    Ответ написан
  • Как использовать Instagram API в России?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    всякого рода VPN - банит.

    Не верно, мобильные и резидентские прокси вполне справляются.
    Нужно решение, при этом бесплатное.

    3$, вполне бесплатно.
    Ответ написан
    Комментировать
  • Как запустить сразу несколько процессов с разными прокси?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Несколько вариантов:

    - How-To: 4 Essential Parts of Multiprocessing in Python (не подходит для синхронизации доступа к файлу, который используется часто, так как может привести к снижению производительности):
    from multiprocessing import Lock, Pool
    
    lock = Lock()
    
    with lock:
        driver = uc.Chrome(seleniumwire_options=wire_options, options=options)

    - Multiprocessing Manager Example in Python (подходит только для синхронизации доступа к простым объектам, таким как списки):
    from multiprocessing import Manager, Pool
    
    manager = Manager()
    
    def get_whoer(proxy: str):
        # ...
    
    if __name__ == '__main__':
        """ip:port:login:password"""
        with Pool(processes=2) as p:
            p.map(get_whoer, proxy_list)

    - How Python Keeps Your Queues Thread-Safe (подходит для синхронизации доступа к любым объектам, но код немного сложнее):
    from queue import Queue
    from multiprocessing import Pool
    
    queue = Queue()
    
    def get_whoer(proxy: str):
        # ...
    
    if __name__ == '__main__':
        """ip:port:login:password"""
        proxy_list = list(map(str.rstrip, open('proxy.txt').readlines()))
        for proxy in proxy_list:
            queue.put(proxy)
        with Pool(processes=2) as p:
            p.map(get_whoer, range(len(proxy_list)))
    Ответ написан
    Комментировать
  • Почему цикл не корректно работает?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    def sum_of_square_digits(n):
        res = 0
        while n > 0:
            d = n % 10
            res += d * d
            n = n // 10
        return res
    
    def is_happy_number(n):
        for _ in range(10):
            n = sum_of_square_digits(n)
            if n == 1:
                return True
        return False
    
    print(is_happy_number(8))  # False
    print(is_happy_number(7))  # True
    Ответ написан
    4 комментария
  • Как создать json список со вложенными словарями в python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть ли возможность в python прописать длинный многоуровневый список со словарями и вставлять туда переменные чтобы по итогу я мог сгенерировать из него JSON?

    1. Вначале формируете словарь (или любые другие типы данных) со всеми необходимыми свойствами.
    2. Преобразуете п1. в json методом json.dumps().
    import json
    
    krevetko = 'иа креветкО!'
    
    data = {
        "form_id": 1345,
        "fields": [
            {"id": 1, "value": krevetko},  # <-- this is, krevetko variable
            {"id": 2, "value": 10306.25},
            {"id": 3, "value": {"item_id": 845}},
            {
                "id": 4,
                "value": [
                    {
                        "row_id": 0,
                        "cells": [
                            {"id": 6, "value": "2017-08-26"},
                            {"id": 9, "value": 10000}
                        ]
                    }
                ]
            }
        ]
    }
    
    print(json.dumps(data))
    
    # {"form_id": 1345, "fields": [{"id": 1, "value": "\u0438\u0430 \u043a\u0440\u0435\u0432\u0435\u0442\u043a\u041e!"}, {"id": 2, "value": 10306.25}, {"id": 3, "value": {"item_id": 845}}, {"id": 4, "value": [{"row_id": 0, "cells": [{"id": 6, "value": "2017-08-26"}, {"id": 9, "value": 10000}]}]}]}

    Больше примеров:
    import json
    
    data_dict = {"name": "John", "age": 30}
    data_list = [1, 2, 3, 4]
    data_string = "Hello, world!"
    data_string_cyrillic = "иа креветкО!"
    data_number = 42
    data_boolean = True
    data_none = None
    
    print(json.dumps(data_dict))  # {"name": "John", "age": 30}
    print(json.dumps(data_list))  # [1, 2, 3, 4]
    print(json.dumps(data_string))  # "Hello, world!"
    print(json.dumps(data_string_cyrillic))  # "\u0438\u0430 \u043a\u0440\u0435\u0432\u0435\u0442\u043a\u041e!"
    print(json.dumps(data_number))  # 42
    print(json.dumps(data_boolean))  # true
    print(json.dumps(data_none))  # null
    Ответ написан
    1 комментарий
  • Имитация действий пользователя на сайте?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Существует ли способ имитировать эти действия так, чтобы JavaScript успешно их распознавал

    Написать на python + selenium алгоритм движение курсора (например, используя кривые безье и катмулл рома, классическую линейную интерполяцию + добавить шума) мыши по координатам, чтобы оно выглядело наиболее "человечным".
    Существует ли способ имитировать эти действия так, чтобы JavaScript успешно их распознавал, но без использования библиотеки PyAutoGUI или аналогичных, которые контролируют реальный курсор?

    Всего 2 варианта:
    - Запускать selenium в headless режиме, тогда не будет визуального окна и курсор мыши не будет перемещаться "в никуда", хотя для js на этом сайте все будет выглядеть "человечно".
    - Запускать selenium без headless режима, тогда курсор будет перемещаться в указанную область окна браузера.
    Ответ написан
  • Как вывести все элементы списка из массива списков json в Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Пример файла JSON

    Это не json, а python список.
    Например мне нужно найти список с id 10 и сохранить все его элементы в отдельный

    Т.к. мысля закончилась, предположу, что отдельный - это "отдельный переменная":
    list_data

    list_data = [
        {
            "id": 121,
            "type": "form_link",
            "name": "cust",
            "tooltip": "",
            "value": {
                "task_id": 432122,
                "task_ids": [
                    1236733
                ],
                "subject": "test_event"
            }
        },
        {
            "id": 122,
            "type": "text",
            "name": "Регион",
            "tooltip": "",
            "value": "MGN."
        },
        {
            "id": 129,
            "type": "text",
            "name": "Проблема",
            "tooltip": "Заправьте картридж",
            "value": "TEST"
        },
        {
            "id": 10,
            "type": "person",
            "name": "Ответственный",
            "tooltip": "none",
            "value": {
                "id": 888,
                "first_name": "Pavel",
                "last_name": "Perkov",
                "email": "example@anime.com",
                "type": "user",
                "status": "WORKING",
                "web_session_settings": {
                    "disable": False
                },
                "mobile_session_settings": {
                    "disable": False
                }
            }
        }
    ]


    # mega function
    def test(data, target_id):
        for item in data:
            if item.get('id') == target_id:
                return item
        return None
    
    res = test(list_data, 10)
    print(res)
    
    # {'id': 10, 'type': 'person', 'name': 'Ответственный', 'tooltip': 'none', 'value': {'id': 888, 'first_name': 'Pavel', 'last_name': 'Perkov', 'email': 'example@anime.com', 'type': 'user', 'status': 'WORKING', 'web_session_settings': {'disable': False}, 'mobile_session_settings': {'disable': False}}}
    Ответ написан
    1 комментарий
  • Почему не работает код бота telebot?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    item2 = types.KeyboardButton(text="Семья в России"),

    Уберите запятые в конце строк, чтобы не было проблем с кортежами.

    bot.reply_to это откуда? По идее, должно быть bot.send_message, исправил код, допишите все нужные кнопки и попробуйте, должно заработать:
    @bot.message_handler(commands=["start"])
    def start(message):
        keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        item1 = types.KeyboardButton(text="Основные документы гражданина Российской Федерации")
        # прочее...
    
        keyboard.add(item1, item2)
        # прочее...
    
        bot.send_message(
            message.chat.id,
            f"Привет",
            f"{message.from_user.first_name}! Я бот, который поможет тебе. Что ты хочешь узнать..?",
            reply_markup=keyboard)
    Ответ написан
    1 комментарий
  • Почему моя асинхронная функция останавливает всю программу?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Хотя Вы и используете асинхронный код выше (в telegram боте), Ваши функции, которые работают с google sheets и бд, работают синхронно. В этом случае, даже если Вы оборачиваете их в await, то они чудесным образом не станут асинхронными и все равно заблокируют исполнение асинхронного eventloop, пока не завершат свою работу.

    Чтобы решить Вашу проблему, необходимо использовать библиотеки, которые умеют в асинхронную работу, бд - aiosqlite, а с google sheets - хз, вроде подходит gspread_asyncio.
    Ответ написан
    Комментировать
  • Ошибка async def aiogram 3x?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Вот сама ошибка(походу что-то я сделал не так и огроомная ошибка поменялась в маленькую):
    C:\Users\akrav\Desktop\машынки\main.py:183: RuntimeWarning: coroutine 'get_cards' was never awaited
    get_cards(message)

    Ну там как бы написано...

    # def new_card(message: types.Message):
        # get_cards(message)
    
    async def card_handler(message: types.Message):
        await get_cards(message)

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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Python не позволяет напрямую указывать @overload для функции без параметров и с параметрами в одной реализации, если эта реализация требует параметр. Но, можно использовать костыль, в виде некого дефолтного аргумента x: None, тогда можно будет вызывать функцию без аргументов:
    from typing import overload, Union
    
    @overload
    def Func(a: int) -> int: ...
    @overload
    def Func(a: bool) -> bool: ...
    @overload
    def Func() -> None: ...
    
    def Func(x: Union[int, bool, None] = None) -> Union[int, bool, None]:
        if x is None:
            return None
        elif isinstance(x, bool):
            return x
        elif isinstance(x, int):
            return 333
        else:
            raise ValueError("Invalid argument type.")
    
    print(Func(10));  # 333
    print(Func(True));  # True
    print(Func());  # None
    print(Func('kek'));  # ValueError: Invalid argument type.
    Ответ написан
    Комментировать
  • Как достать словарь из websocket?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    - Декодировать json.
    - Прочитать значения из словаря и распечатать по условию.
    import json
    
    def on_message(ws, message):
        data = json.loads(message)
        s = data.get("s")
        p = data.get("p")
    
        if p:
            _p = float(p)
    
            if _p > 51500:
                print(f"Монета {s} больше 51500, текущая цена: {_p}")
            else:
                print(f"Монета {s} меньше или равна 51500, текущая цена: {_p}")
    Ответ написан
    1 комментарий
  • Как вернуть кортеж из функции?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    def sort_pair(a, b):

    В ТЗ указано, что функция sort_pair должна принимать один аргумент, который является кортежем из двух элементов целочисленного типа, а не 2 аргумента не определенного типа...
    def sort_pair(pair):
        a, b = pair
        if a <= b:
            return (a, b)
        else:
            return (b, a)
    
    print(sort_pair((5, 1)))  # (1, 5)
    print(sort_pair((2, 2)))  # (2, 2)
    print(sort_pair((7, 8)))  # (7, 8)

    Добавим аннотации, чтобы прям хорошо было:
    from typing import Tuple
    
    def sort_pair(pair: Tuple[int, int]) -> Tuple[int, int]:
        a, b = pair
        if a <= b:
            return (a, b)
        else:
            return (b, a)
    
    print(sort_pair((5, 1)))  # (1, 5)
    print(sort_pair((2, 2)))  # (2, 2)
    print(sort_pair((7, 8)))  # (7, 8)
    Ответ написан
    2 комментария
  • Message: move target out of bounds: viewport size: 452, 362 (Session info: MicrosoftEdge=121.0.2277.128). Что делать?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Message: move target out of bounds: viewport size: 452, 362 (Session info: MicrosoftEdge=121.0.2277.128).

    Перемещение курсора за область браузера, которая равна "viewport size: 452, 362" (даже если Вы там и выставили "driver.set_window_size(500, 500)").
    move_by_offset

    viewport size: 452, 362

    Это относительное смещение от текущего положения курсора, т.е. 250 * 2 итерации (или 1 дополнительную) = 500, минус возможные границы или элементы браузера и вот, у Вас уже не хватает области браузера.

    Я использую не относительные координаты (move_by_offset), а абсолютные move_to_element_with_offset.
    Ответ написан
    1 комментарий
  • Как запарсить страницу?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Может ли на hh.ru стоять какая-то защита от парсинга?)

    Самая примитивная, которая чекает заголовки:
    import requests
    from bs4 import BeautifulSoup
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
        'Accept-Language': 'en-US,en;q=0.9',
        'Accept-Encoding': 'gzip, deflate',
        'Connection': 'keep-alive',
    }
    
    res = requests.get('https://tomsk.hh.ru/article/31475', headers=headers)
    
    if res.status_code == 200:
        soup = BeautifulSoup(res.text, 'html.parser')
        el = soup.find('div', class_='URS-ratingTable')
    
        if el:
            print(el)
        else:
            print('Table not found!')
    else:
        print('The problem with connecting to the website', {res.status_code})
    Ответ написан
    Комментировать
  • Почему не работает код?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    # balls.append([balls, dx, dy])
    balls.append([ball, dx, dy])
    
    # x,y = balls[i][0].positions()
    x,y = balls[i][0].position()
    
    # while True:
        # for i in range(count):
    while True:
        window.update()
        for i in range(count):
    Ответ написан
  • Как прослушать .ogg файл?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно заюзать либу PyGame:
    def play(file_path):
        pygame.mixer.init()
        pygame.mixer.music.load(file_path)
        pygame.mixer.music.play()
    
        while pygame.mixer.music.get_busy():  # if True, the melody is being played
            time.sleep(1)
    
    play('path_to_file/file.ogg')  # dancing dancing dancing...
    Ответ написан
    Комментировать
  • Как передать переменную из Js в python(Flask)?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Ajax (fetch):
    async function getValue() {
        const input = document.querySelector('#input-id');
    
        try {
            const res = await fetch('/', {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({'value': input.value})
            });
    
            if (res.ok) {
                console.log('Send success!');
            } else {
                throw new Error(`Send error, ${res.statusText}`);
            }
        } catch (error) {
            console.error('Error', error);
        }
    }

    Принимаем и возвращаем, если все ок:
    from flask import Flask, render_template, request, jsonify
    import json
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        if request.method == 'GET':
            return render_template('index.html')
        elif request.method == 'POST':
            try:
                data = request.json
                if 'value' in data:
                    value = validate(data['value'])
                    return jsonify({'message': 'Success!', 'value': value}), 200
                else:
                    raise KeyError('Value key not found')
            except (KeyError, json.JSONDecodeError) as e:
                return jsonify({'error': 'Invalid data format'}), 400
    
    def validate(value):
        return value
    
    if __name__ == '__main__':
        app.run(debug=True)
    Ответ написан
    Комментировать
  • Почему БД не принимает буквы, а только цифры?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    # cursor.execute(f'UPDATE Settings SET remember_pass = {user_pass.get().strip()} WHERE id = 1')
    cursor.execute("UPDATE Settings SET remember_pass = ? WHERE id = ?", (user_pass.get().strip(), 1))
    Ответ написан
    Комментировать
  • Что учить Python бэкенд разработчику?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    что стоит учить, чтобы стать действительно хорошим специалистом в бэкенд разработке

    1. Django для большинства проектов, FastAPI для остальных, т.к. Flask стремительно проигрывает рынок FastAPI:
    - https://blog.jetbrains.com/pycharm/2023/12/django-...
    - https://lp.jetbrains.com/python-developers-survey-2022/
    2. БД mysql/postgresql.
    3. Очереди по типу Celery.
    4. Asyncio.
    Ответ написан
    Комментировать