Как идентифицировать элемент с помощью Selenium и Python - PullRequest
1 голос
/ 28 мая 2020

Я возился с Selenium (Python) целый день, работая над проектом. Я застрял, пытаясь щелкнуть ссылку на веб-странице, потому что я не могу получить элемент ни одним из способов, которые я нашел до сих пор.

Ссылка такая:

<p>
<a href="0_fr.asp?contenido=0actunor.asp" target="mainFrame"><font size="3" face="Arial" color="#CC9900">
<b>Base de datos de Disposiciones Vigentes</b></font></a>
</font>
</p>

Итак, я пробовал эти вещи до сих пор, и все дают мне NoSuchElementException:

  1. driver.find_element_by_css_selector ("a [href = 0_fr. asp? Contenido = 0actunor.asp ] ")
  2. driver.find_element_by_css_selector ('div: contains (" Base de datos de Disposiciones Vigentes ")')
  3. то же, что и 1), но копирование и вставка только селектора CSS как Строка
  4. по тексту ссылки и частичному тексту ссылки с использованием содержимого от до
  5. с использованием идентификатора на случай, если он что-то делает.

И еще несколько, которые можно найти в других вопросах StackOverflow и онлайн-руководствах по созданию моих собственных селекторов css и тому подобного, но я не знаю ни HTML, ни CSS, поэтому было немного сложно следовать им. Я могу предоставить дополнительную информацию, если необходимо, но я не могу связать веб-страницу, так как вам придется войти в систему, а это дело работы.

Любая помощь или места для поиска дополнительной информации приветствуются!

РЕШЕНО: Проблема заключалась в том, что ссылка находилась внутри фрейма, который был внутри другого фрейма. Мне просто приходилось дважды использовать driver.switch_to.frame ("frameName"), а затем использовать css_selector как обычно и работать должным образом.

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Элемент - это <a> элемент и всеми возможными способами вы будете взаимодействовать, т.е. нажимать на него. В идеале, чтобы вызвать click() на любом элементе, используя Selenium , вы должны вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих стратегий Locator :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='contenido'][href*='actunor'][target='mainFrame'] b"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, 'contenido') and contains(@href, 'actunor')][@target='mainFrame']//b[text()='Base de datos de Disposiciones Vigentes']"))).click()
    
  • Примечание : вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Обновление

Как вы наблюдаете TimeoutException вызывает WebDriverWait вам необходимо адресовать NoSuchElementException сначала после обсуждения в Selenium «selenium.common.exceptions.NoSuchElementException» при использовании Chrome

0 голосов
/ 28 мая 2020

Попробуйте выполнить следующую команду.

driver.find_element_by_link_text («База данных Disposiciones Vigentes»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...