• Как получить доступ к полям связанного объекта через 2 таблицы в Django?

    Представим 2 модели Post и Category. В модели Post поле со свзяью(назовем это поле cat) foreignkey с Category(т.е Post-вторичная модель, Category - первичная). Если мы хотим через модель Post обратиться к Category: Post.objects.filter(cat__id=1). Тут был пример фильтрации постов, у которых категория с id=1. То есть мы ищем посты у которых категория самая первая (по id).Если мы хотим обраться через Category к модели Post (обратная связь), то тут надо использовать менеджер обратной связи ( [имя вторичной модели]_set или использовать свойство related_name, если оно определено у поля cat ). К примеру:
    cat = Category.objects.get(id=1) - получение категории с  id=1

    И теперь через менеджер обратной свзязи ( в нашем случае, если related_name не указан - будет post_set, если же related_name указан используем его). cat.post_set.all() - выводим все посты принадлежащие cat, категории с id =1. Надеюсь я то, что нужно обьяснил?
    Ответ написан
    Комментировать
  • Как заполнить форму python, selenium?

    Добрый день. У вас возникли проблемы потому что на сайте используется Shadow DOM.
    Скриншот фрагмента кода удалён модератором.

    Как работать с Shadow DOM в различных версиях Selenium можете прочитать например в этой статье на хабре.
    Если используйте актуальные версии, то ваш код может быть модифицирован таким образом
    from selenium import webdriver
    from fake_useragent import UserAgent
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    
    
    ua = UserAgent()
    url = "https://www.nealthy.com/alpha"
    
    options = webdriver.ChromeOptions()
    options.add_argument(f'user-agent={ua.chrome}')
    
    web_driver = Service('C:\\webdriver\\chromedriver.exe')  #ПУТЬ К ВЕБ ДРАЙВЕРУ
    driver = webdriver.Chrome(service=web_driver, options=options)
    
    driver.get(url=url)
    
    # Выше приведен ваш код, изменения начинаются здесь
    shadow_host = driver.find_element(By.XPATH, '//form-widget')
    shadow_root = shadow_host.shadow_root
    shadow_content = shadow_root.find_element(By.CSS_SELECTOR, '#firstname')
    shadow_content.send_keys('Mikhail')

    Еще обратите внимание, что в Shadow DOM лучше искать локатор по CSS селектору, иначе можно наткнуться на баги Selenium.
    Ответ написан
    1 комментарий
  • Парсинг сайта Яндекс.Музыка на Python, как?

    Vindicar
    @Vindicar
    RTFM!
    Если сайт не слишком защищается от парсеров и не требует JS для работы:
    requests для скачивания страницы, beautiful soup для разбора html документа и поиска элементов в нём.

    Если сайт требует JS для работы, можно пошариться в консоли разработчика в браузере и найти, какие запросы страница-фронт делает, чтобы подгрузить данные. Тогда ты можешь научиться делать точно такие-же запросы, и получать данные сразу в машинночитаемом виде (часто в JSON).

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

    Если сайт детектит selenium, нужно искать сборки селениума, которые труднее обнаружить. Тут я навскидку не подскажу.
    Ответ написан
    Комментировать
  • Почему PyCharm и VS code по-разному реагируют на одинаковые файлы?

    Vindicar
    @Vindicar
    RTFM!
    Почитай, что такое относительный путь, и что такое рабочий каталог.
    Это, на минуточку, школьный курс информатики.

    Ты указываешь относительный путь к файлу при открытии, поэтому путь разрешается относительно текущего рабочего каталога. Разные IDE могут указывать разные каталоги как рабочие при запуске скрипта, не говоря уже о том, что при запуске скрипта из терминала рабочим может быть любой каталог.
    А ещё рабочий каталог может меняться во время работы скрипта.

    Так что если тебе нужен путь к файлу именно рядом со скриптом, строй этот путь сам, используя модули sys и pathlib (ну или os.path, если по-старинке).
    import sys
    import pathlib
    # каталог, в котором лежит скрипт
    APP_DIR = pathlib.Path(sys.argv[0]).parent.resolve()
    # файл в этом каталоге
    my_file_path = APP_DIR / 'Token.txt'  
    
    with my_file_path.open('rt') as f:  # получаем файловый объект, как обычно
        data = f.read()
    Ответ написан
    Комментировать
  • Как вывести в строке только числа?

    Maksim_64
    @Maksim_64
    Data Analyst
    import re
    text = '1456gtefd14696'
    for number in re.findall(re.compile(r'\d+'), text):
        print('Число',number, end=' ')
    Ответ написан
    Комментировать