Как найти элемент со ссылкой на текст в HTML, используя Selenium и Python - PullRequest
1 голос
/ 03 апреля 2019

У меня есть список URL-адресов, по которым мне нужно перейти.Все URL попадают на домашнюю страницу сайта.Мне нужно найти где-нибудь на главной странице ссылку на другой раздел сайта, который содержит «Найти доктора», потому что мне нужно перейти к разделу «Найти доктора» на каждом сайте.

Я пыталсянайти элемент с использованием XPath.

driver.find_element_by_xpath("//*[contains(text(), 'Find a Doctor')]").get_attribute('href')

Так выглядит HTML-код на одном конкретном URL-адресе, но макет может отличаться на другом URL-адресе, поскольку я перебираю различные ссылки.

<a href="/search/custom.asp?id=2671" tabindex"-1">
<span> Find a Doctor </span>
</a>

Проблема в том, что строка находится внутри промежутка, поэтому у промежутка нет href.

Я ожидаю, что на выходе будет раздел href для раздела найти доктора на сайте, но вместо этого он вернул пустуюстрока.

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Как вы правильно упомянули, текст Найти доктора находится внутри тега <span> и не имеет атрибута href .Но тег , предшествующий <a>, содержит атрибут href .Таким образом, для извлечения атрибута href вы можете использовать одно из следующих решений:

  • XPath 1 :

    my_href = driver.find_element_by_xpath("//span[contains(., 'Find a Doctor')]//preceding::a[1]").get_attribute('href')
    
  • XPath 2 :

    my_href = driver.find_element_by_xpath("//span[normalize-space()='Find a Doctor']//preceding::a[1]").get_attribute('href')
    
1 голос
/ 03 апреля 2019

Все, что вам нужно сделать, это перейти к родителю, как показано ниже.

driver.find_element_by_xpath("//*[contains(text(), 'Find a Doctor')]/parent::a").get_attribute('href')
...