Задать вопрос
Ответы пользователя по тегу Python
  • Как выйти из бесконечной работы браузера при парсинге через 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
    Что делать с пайтоном на телефоне?

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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Баланс формируется динамически, request не может его получить. Выбор: парсить на питоне с aiohttp, asyncio, bs4 или requests + bs4?
    Ответ написан
  • Какие библиотеки использовать для разработки бэкенда python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Flask / django / restapi?

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

    То, о чем больше написано различной документации, втч. и к компонентам и где больше разработчиков, которые в случае чего подскажут.
    Что из этого ... эффективнее.

    Эффективность бывает разная, скорость разработки - Django, производительность самого фреймворка - FastAPI. Периодически, используют сразу оба, где FastAPI обрабатывает нагруженные участки приложения, а Django занимается всем остальным.
    Ответ написан
    Комментировать
  • Как подключиться к OpenVPN через python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Почему код написанный на python работает некорректно?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Знаю, что быдло код, просьба не критиковать , так как я только учась! :)

    А как Вы научитесь, если Вас не будут критиковать?
    Почему не парсит остальные страницы?

    Вас не смущает, что root находится в другой области видимости?
    while cout_page < 8:
      # ...
      root = soup.findAll('span',{'class':'label label-default'})
    
    for i in root:
      tage.append(i.text)

    Вот так работает:
    import requests
    from bs4 import BeautifulSoup
    
    start_page = 1
    last_pages = 8
    
    tags = []
    
    for page in range(start_page, last_pages + 1):
        url = f"https://cs-ms-monitoring.ru/all-servers/page/{page}/"
        res = requests.get(url)
    
        if res.status_code == 200:
            soup = BeautifulSoup(res.text, "lxml")
            root = soup.find_all('span', {'class': 'label label-default'})
            tags.extend([tag.text for tag in root])
        else:
            print(f"Ошибка на странице {page}")
    
    with open("base.txt", "w") as file:
        for tag in tags:
            file.write(tag + "\n")

    КартинкО

    66bc90f85ce5e092912425.png
    66bc90fcd10ad137906749.png
    Ответ написан
  • Как исправить ошибку при попытке создать файл в функции и затем его открыть?

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

    Читать 1 файл (mode='r') можно неограниченному количеству скриптов единовременно.

    Чтение с возможностью записи (w, a или r+):
    - В винде файл может блокироваться первым читающим, остальные сосут чупик.
    - В линуксе возможно не блокирование файла, но могут возникнуть проблемы с записью, если не реализован механизм синхронизации.

    Самое простое - использовать контролируемую блокировку файла на уровне скрипта, который взаимодействует с файлами (fcntl==linux, msvcrt==win):
    import fcntl
    
    with open('file.txt', 'a') as f:
        fcntl.flock(f, fcntl.LOCK_EX)  # файл кем то заблокирован, ждем
        try:
            f.write("Some data\n")  # файл разблочился, блокируем его и работаем с ним
        finally:
            fcntl.flock(f, fcntl.LOCK_UN)  # что то пошло не так, снимаем блокировку с файла принудительно
    Ответ написан
    Комментировать
  • Selenium: почему не находит элементы внутри элемента в LOOP?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Необходимо использовать относительные пути в XPATH:
    # h2= g.find_element(By.XPATH, '//h2').text
    h2 = g.find_element(By.XPATH, './/h2').text
    Ответ написан
    2 комментария
  • Как в selenium открыть селектор на JS?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Как в selenium открыть селектор на JS?

    Т.е. элемент, который создаётся динамически? Используйте явное ожидание элемента и уже затем взаимодействуйте с ним.
    Ответ написан
    2 комментария
  • Как использовать свой профиль браузера в Python Selenium?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Комментировать
  • Как решить проблему с установкой face-recognition через командную строку?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    C:\Users\markk>pip install face-recognition

    https://github.com/ageitgey/face_recognition/issue...

    This seems to be same as #1212
    Using pip3 command, I am able to successfully install on windows.
    pip3 install face_recognition
    Reference: https://face-recognition.readthedocs.io/en/latest/...
    it is face_recognition and not face-recognition in that link.


    Так же пишут, что нужно поставить cmake pip install cmake.
    Ответ написан
    Комментировать