Задать вопрос
Ответы пользователя по тегу Python
  • Выдаёт ошибку NoSuchElementException( Selenium, Python )?

    Скорее всего проблема возникает из-за того, что вы не учитываете разрешение страницы, ваш локатор будет работать только на мобильной версии, когда ширина страницы в браузере менее 992 пикселей.
    Можете использовать этот локатор по XPath, он подойдет и для мобильной и для десктопной версии сайта
    //figure[@data-test-component='UserCell']//img
    Ответ написан
  • Python selenium как скачать конфиг?

    Можно использовать XPath для написания локатора, это очень мощный инструмент.
    locator= '//td[text()="user2"]//following-sibling::td//a[contains(text(),"Android")][1]'
    driver.find_element(By.XPATH, locator).click()


    Можно также воспользоваться ответом выше от duff89, только нужно учитывать, что на одной строке в таблице слово Andorid встречается дважды и вам нужен не i-й элемент, а 2 * i - 1, то есть первый, третий, пятый и т.д.
    Ответ написан
  • Как найти элемент по индексу в методе ожидания element_to_be_clickable?

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

    1. Использовать :nth-child() в CSS
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[title="Связь"]:nth-child(N)')))

    2. Искать элемент через XPath
    wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@title="Связь"][N]')))

    3. В метод element_to_be_clickable можно передавать не только локатор, но и сам элемент
    elements = driver.findElements(By.CSS_SELECTOR, '[title="Связь"]');
    wait.until(EC.element_to_be_clickable(elements[N]))


    UPD: Обновил второй способ, в первый раз забыл поставить звёздочку, звёздочка обозначает любой элемент, в место нее можно подставить свой элемент (div, span, li, td и т.д.) чтобы уточнить локатор.
    Ответ написан
  • Как заполнить форму 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 комментарий
  • Почему не поднимается веб драйвер selenium после обновления хрома?

    Ваша проблема вероятнее всего связана с изменениями работы Headless mode в Google Chrome 110.
    Для того чтобы ваш скрипт продолжал работать, нужно внести небольшие изменения, в блоге разработчиков Selenium на эту тему была статья с примерами кода на разных языках.
    Ответ написан
    Комментировать
  • Почему Селениум не видит элемент?

    На сайте virustotal активно используется Shadow DOM.
    63dced61dfaa3597847544.png
    Чтобы обратиться к его содержимому в selenium нужно использовать метод shadow_root.
    Подробнее об этом вы можете почитать например в этой статье на Хабре https://habr.com/ru/company/simbirsoft/blog/598407/
    Ответ написан
    Комментировать
  • Как выбрать элемент если он совпадает со списком?

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

    Или же вы можете итерироваться по всем значениям списка, это ближе к вашей идее.
    В вашем случае должен получиться примерно следующий код
    correct_dubbing = ['TVShows', 'Кубик в Кубе (Kubik³) (реж. версия)', 'Дубляж']
    select = driver.find_elements(By.XPATH, '//*[@id="translators-list"]')
    for option in select.options:
        if option.text in correct_dubbing:
            option.click()
            break
    Ответ написан
    Комментировать
  • Как определить элемент TextInputbox с помощью selenium?

    Вы пытаетесь найти элемент учитывая его порядок на странице, этот способ имеет недостаток, если вдруг в будущем порядок элементов на странице поменяется, то локатор вернет неверный результат. Лучше воспользоваться тем, что input был обернут в div с классом qa-NameField, из названия можно предположить, что он был добавлен разработчиками по просьбе тестировщика, не пропадет и не изменится в случае дальнейшей доработки формы.

    Пример такого локатора выглядит как-то так
    //div[contains(@class, "qa-NameField")]//input
    Ответ написан