Задать вопрос
Ответы пользователя по тегу Python
  • Olx парсинг номера?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    - Selenium не нужен, он легко определяется и слишком много жрет. Используйте Zendriver.
    - Используйте реалистичный отпечаток браузера.
    - Используйте мобильные прокси.
    - Используйте реалистичное движение курсором мыши или сенсорные действия (для смартфонов).
    - Нужна асинхронность? - запускайте Zendriver асинхронно, используя Asyncio.

    Обнаружат ли вас? Простая-средняя защита - нет, сложная да.
    Ответ написан
    Комментировать
  • Есть ли в питоне файл проекта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Нет такого, единственное что есть зрелое, так это pyproject.toml и poetry.lock (poetry), в котором описывается версия python и необходимых библиотек для текущего проекта. А от циклических импортов можно спастись лишь руками, заранее грамотно проектируя проект и вынося нужный функционал в модули и пакеты.
    Ответ написан
    1 комментарий
  • Как ускорить сканирование python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как варианты:
    1. Обязательно ли искать оранжевый индикатор во всей области изображения, а не в одном ожидаемом месте?
    2. mss.mss() - обязательно ли каждую итерацию захватывать экран заново?
    3. Преобразование в hsv точно нужно?
    4. time.sleep(0.05) # Проверяем цвет каждые 100 мс - что то не клеится в Ваших показаниях, на основание чего указано 50мс?

    Короче, профилировщик в зубы и бегом искать узкие места самостоятельно.
    Ответ написан
    1 комментарий
  • Как осуществить запрос к API с помощью Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Tenacity
    Tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It originates from a fork of retrying which is sadly no longer maintained.

    Под Вашу задачу, это будет выглядеть примерно так:
    import requests
    from tenacity import retry, stop_after_attempt, wait_fixed
    
    @retry(stop=stop_after_attempt(3), wait=wait_fixed(3))
    def fetch():
        res = requests.get("https://site.ru")
        # res = requests.get("https://site.ru", params={"key": "value"})
        if res.status_code != 200:
            raise requests.exceptions.HTTPError(res.status_code)
    
        data = res.json()
        return data
        # return data["link"]
    
    print(fetch())

    - wait=wait_fixed(3) - ждать 2 секунды между попытками.
    - stop=stop_after_attempt(3) - остановка после 3х попыток.
    Ответ написан
    Комментировать
  • Как запустить готовый чужой код на python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Скачать и установить python интерпретатор.
    2. Скачать репозиторий с кодом в нужную директорию.
    3. Открыть консоль и перейти в папку со скаченным проектом.
    4. Установить зависимости.
    5. Выполнить python код.

    Основные команды Pip для разработчиков Python
    Ответ написан
    Комментировать
  • Как посчитать сумму элементов в большом вложенном словаре?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting

    Выдаёт ошибку:
    Traceback (most recent call last):
    line 46, in
    for m in n.values():
    AttributeError: 'int' object has no attribute 'values'

    Метод values() у чисел? Может не стоит?
    Подскажите как посчитать сумму элементов в данном словаре

    А если глубина словаря изменится, опять все вложенные for переписывать? С рекурсией лучше выглядит:
    def best_function(d):
        sum = 0
        for v in d.values():
            if isinstance(v, dict):
                sum += best_function(v)
            else:
                sum += v
        return sum
    
    print(best_function(dct)) # 3906

    Ну и как правильно подметил Влад Григорьев - почему отладкой кода не занимаетесь? А если задача будет сложнее, например в 100 раз, 100 вопросов зададите?
    Ответ написан
    2 комментария
  • Google Chrome блокирует скачивание файла. Возможно ли отключить?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Вручную можно сделать через настройку "Разрешить сайтам показывать небезопасный контент" с указанием ссылки на web ui, но не понимаю как это можно реализовать в коде.

    Создайте профиль браузера, разрешите что нужно, затем запускайте selenium под этим профилем. Это костыль, но менее костыльный, чем другой.
    Ответ написан
    2 комментария
  • Почему в Python sqlite3 выводится из таблицы переменная вот так вот(3,)?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    fetchall() что возвращает? Вам же нужно вернуть данные по одному пользователю? Тогда используйте метод fetchone(), вместо fetchall():
    cursor.execute("SELECT dollars FROM users WHERE id=?", (message.from_user.id,))
    res = cursor.fetchone()
    if res:
        debet = res[0]
        await message.answer(f"Ваш айди: {message.chat.id}\nБаланс: {debet}")
    else:
        await message.answer("Не знаем таких.")
    Ответ написан
    Комментировать
  • Как проверить наличие поля в JSON файле с помощью python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Применять метод .get() к строке не лучшее решение, попробуйте так:
    for item in response.json()['Employees']:
        first_name = item["User"]["FullName"]["FirstName"]
        last_name = item["User"]["FullName"]["LastName"]
        
        if "MiddleName" in item["User"]["FullName"]:
            middle_name = item["User"]["FullName"]["MiddleName"]
        else:
            middle_name = "отчество отсутствует"
        
        print(f"Имя: {first_name}, фамилия: {last_name}, отчество: {middle_name}")
    
    
    # Имя: Иван, фамилия: Иванов, отчество: Иванович
    # Имя: Петр, фамилия: Петров, отчество: отчество отсутствует
    Ответ написан
    Комментировать
  • Как проверить в списке чисел наличие числа, содержащего цифру 3?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    nums = list(map(int, input("Введите числа: ").split()))
    
    if any('3' in str(n) for n in nums):
        print("Найдено")
    else:
        print("Не найдено")
    Ответ написан
    Комментировать
  • Как выйти из бесконечной работы браузера при парсинге через Selenium?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Нейронка это конечно хорошо, но желательно проверять, что она пишет:
    # EC.presence_of_element_located((By.CSS_SELECTOR, "product-slider__img js-product-current-img"))
    EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))

    Ниже код для Chrome и FF (Python 3.10, Windows 11 Pro 23H2) - все прекрасно работает, за исключением сайта-помойки, который грузится минуту:
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
    options = Options()
    service = Service(r'D:\project\chromedriver-130.0.6723.93.exe')
    driver = webdriver.Chrome(service=service, options=options)
    
    url = 'https://superstep.ru/product/NCFSW0W288YW_GRA/#colorGRA'
    driver.get(url)
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
        )
        page_html = driver.page_source
        print(page_html)
    
    except TimeoutException:
        print("Элемент не найден")
    
    finally:
        print('Программа завершена')
        driver.quit()

    from selenium import webdriver
    from selenium.webdriver.firefox.service import Service
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
    options = Options()
    service = Service(r'D:\project\geckodriver.exe')
    driver = webdriver.Firefox(service=service, options=options)
    
    url = 'https://superstep.ru/product/NCFSW0W288YW_GRA/#colorGRA'
    driver.get(url)
    
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".product-slider__img.js-product-current-img"))
        )
        page_html = driver.page_source
        print(page_html)
    
    except TimeoutException:
        print("Элемент не найден")
    
    finally:
        print('Программа завершена')
        driver.quit()

    672b4890b03b0937030403.png
    Ответ написан
    2 комментария
  • Как правильно воспользоваться документацией API к сайту и исполнить методы в Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Получить your_secret_key, скорее всего в ЛК этого сайта.
    2. Вставить из примера ссылку в браузер и перейти, подставив вместо your_secret_key полученный ключ из п1, вместо остальных - в API руководстве написано, что нужно.
    3. В результате, "в браузер вернется json объект" с данными от сервера, которые так же указаны в API руководстве.

    4. Затем, пишем Python код, будем использовать синхронный requests (как самый простой):
    import requests
    
    # Подставить нужные данные из API руководства
    params = {
        'key': '?',
        'hash_name': '?',
        'id': '?',
        'price': '?',
    }
    
    # GET запрос на сервер, аналог того, что мы использовали в браузере из п2.
    response = requests.get('https://rust.tm/api/v2/buy', params=params)
    
    # Печатаем результат запроса, аналог того, что мы использовали в браузере из п3.
    print(response.json())
    
    # В консоль распечатается приблизительно это:
    
    # {
    #   "success": true,
    #   "id": "136256960"
    # }
    
    # Затем нужно циклом обойти результат с сервера и уже на основание полученных данных - предпринять необходимые действия. Например, пойти пожрать, чем я сейчас как раз и займусь... ;)

    P.S. специально написал ответ максимально простым языком, и не вижу смысла писать более сложные код и рассказывать про виртуальное окружение, т.к. скорее всего Вы в любом случае пойдете гуглить эти проблемы.

    P.P.S. код, ошибки и ссылки на api нужно писать текстом, а не скринами, не нарушайте правила сервиса!
    Ответ написан
    1 комментарий
  • Как ускорить обработку POST запроса Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    8-10 секунд уходит, это не дело, как можно исправить?

    Переписать сервер, код которого Вы разумеется не предоставили.
    Ответ написан
    1 комментарий
  • Регистрация на Twitch с использованием Selenium вызвать ошибку «Ваш браузер не поддерживается". Что делать?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Nodriver, официальная замена undetected-chromedriver.
    Ответ написан
    Комментировать
  • Анимированная загрузка с многоточием, как сделать?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Комментировать
  • Как сделать вывод сообщения в определённую секунду?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    import time
    
    # Время берется 1 раз в момент запуска скрипта, чему оно будет равно?
    now = datetime.now() 
    current_time = now.strftime("%H:%M:%S")
    
    # Цикл запущен и проверяет время, которое было взято 1 раз выше, что получится? Получится то, что цикл будет искать время, которое уже истекло.
    while True:
        time.sleep(1)
        if current_time == '16:49:00':
            print('text')
    
    # Так, щас 16:49:00?
    # Ок, ждем 1 сек...
    # Так, щас 16:49:01?
    # Ок, ждем 1 сек...
    # Так, щас 16:49:02?
    # У нас время идет вперед или назад..? Если все таки вперед, то сможет ли оно достигнуть current_time, которое уже меньше, чем ожидаемое время..?

    print() в помощь, чтобы понимать, что происходит в коде, если до полноценной отладки пока далеко:
    import time
    from datetime import datetime
    
    while True:
        now = datetime.now()
        current_time = now.strftime("%H:%M:%S")
    
        if current_time == '17:15:00':
            print('text')
            time.sleep(1)
        else:
            print(f'Нихуа ({current_time})!')
            time.sleep(1)
    
    # Нихуа (17:14:56)!
    # Нихуа (17:14:57)!
    # Нихуа (17:14:58)!
    # Нихуа (17:14:59)!
    # text
    # Нихуа (17:15:01)! <--- Вот здесь оказывается Ваш первоначальный скрипт
    # Нихуа (17:15:02)!
    # Нихуа (17:15:03)! <--- Мы ждем какое время, 16:49:00?

    P.S. Ваш код все таки сработает, когда пройдут сутки, но я не думаю, что так было задумано ;)
    Ответ написан
    2 комментария
  • Как устранить дублирование кода?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант (>=Python3.10):
    from typing import Dict, Any
    
    def process(answer, result_json: Dict[str, Any]) -> None:
        tmp_json = parse_answer(answer)
        result_json['summary_text'] += tmp_json['result']
        result_json['tags'].extend(tmp_json['tags'])
        result_json['input_size'] += answer.input_size
        result_json['output_size'] += answer.output_size
    
    def handler(text: str, max_size: int) -> Dict[str, Any]:
        result_json = {'summary_text': '', 'tags': [], 'input_size': 0, 'output_size': 0}
    
        match len(text):
            case size if size > max_size:
                chunker = TextChunker(maxlen=max_size)
                for chunk in chunker.chunk(text):
                    answer = get_answer(chunk, tags_quantity=1)
                    process(answer, result_json)
            case _:
                answer = get_answer(text, tags_quantity=3)
                process(answer, result_json)
    
        return result_json
    Ответ написан
    2 комментария
  • Если любой из элементов массива слов имеется в строке - выдать true, как?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    list = ['Да', 'да', 'интересно', 'Интересно']
    input = input("Введите текст: ")
    
    if any(w in input for w in list):
        print('Одно из слов есть в тексте')

    или:
    list = ['Да', 'да', 'интересно', 'Интересно']
    input = input("Введите текст: ")
    
    match input:
        case _ if any(w in input for w in list):
            print('Одно из слов есть в тексте')
        case _:
            print('Здесь нет таких')
    Ответ написан
    8 комментариев
  • Как эмулировать согласие на обработку данных?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    данный код не работает

    Конечно не работает, Вы обращаетесь к свойству click (которого не существует), а не к методу click().
    # driver.find_element("xpath", "//input[@id='LinkDa']" ).click
    driver.find_element("xpath", "//input[@id='LinkDa']" ).click()

    Полный вариант:
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get('https://autoins.ru/osago/raschet-stoimosti-osago/proverit-kbm/')
    
    # Debug
    time.sleep(10)
    
    checkbox = driver.find_element(By.XPATH, '//label[@for="linkDa"]')
    checkbox.click()
    
    # Debug
    time.sleep(10)
    
    button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "btnDa"))
    )
    
    button.click()
    
    # Debug
    time.sleep(10)
    
    driver.quit()
    Ответ написан
    Комментировать
  • Что делать с пайтоном на телефоне?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что делать с пайтоном на телефоне?

    Ничего.
    Ответ написан
    Комментировать