Как найти тег по тексту в его дочернем теге - PullRequest
1 голос
/ 09 февраля 2020

Я новичок в Webelement и селене, кто-нибудь может мне помочь, как найти элемент ниже, используя текст "Hotel Wahington":

<a class="hotel_name_link url" href="/hotel/nl/washington.html?label=gen173nr-1FCAEoggI46AdIM1gEaFCIAQGYATG4ARjIAQzYAQHoAQH4AQKIAgGoAgS4Apyz__EFwAIB&amp;sid=1b691d9ad57ac7ee7c3d40dac2f7f488&amp;dest_id=-2140479&amp;dest_type=city&amp;group_adults=2&amp;group_children=0&amp;hapos=1&amp;hpos=1&amp;no_rooms=1&amp;sr_order=popularity&amp;srepoch=1581242789&amp;srpvid=87de4712b9a90095&amp;ucfs=1&amp;from=searchresults;highlight_room=#hotelTmpl" target="_blank" rel="noopener">
  <span class="sr-hotel__name" data-et-click="    ">Hotel Washington</span>
  <span class="invisible_spoken">Opens in new window</span>
</a>

Добавление исходной ссылки ниже: https://www.booking.com/searchresults.html?label=gen173nr-1FCAEoggI46AdIM1gEaFCIAQGYATG4ARjIAQzYAQHoAQH4AQKIAgGoAgS4ApSSgPIFwAIB&sid=dcd3ff4c30abfd0bc264d5ae4a4c1d7a&sb=1&sb_lp=1&src=index&src_elem=sb&error_url=https%3A%2F%2Fwww.booking.com%2Findex.html%3Flabel%3Dgen173nr-1FCAEoggI46AdIM1gEaFCIAQGYATG4ARjIAQzYAQHoAQH4AQKIAgGoAgS4ApSSgPIFwAIB%3Bsid%3Ddcd3ff4c30abfd0bc264d5ae4a4c1d7a%3Bsb_price_type%3Dtotal%26%3B&sr_autoscroll=1&ss=hotel+washington&is_ski_area=0&checkin_year=&checkin_month=&checkout_year=&checkout_month=&group_adults=2&group_children=0&no_rooms=1&b_h4u_keep_filters=&from_sf=1

Ответы [ 5 ]

1 голос
/ 09 февраля 2020

Чтобы выбрать тег привязки на основе text "Hotel Wahington", используйте следующий xpath.

Используйте следующий Xpath

driver.find_element_by_xpath("//a[@class='hotel_name_link url' and contains(.,'Hotel Washington')]").click()

или следующий css селектор.

driver.find_element_by_css_selector("a.hotel_name_link.url[href*='/hotel/nl/washington']").click()

Или частичный текст ссылки.

driver.find_element_by_partial_link_text("Hotel Washington").click()
0 голосов
/ 09 февраля 2020

Вы можете найти элемент, используя только text. Вы можете попробовать следующее решение:

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

element = WebDriverWait(driver, 50).until(
    EC.presence_of_element_located((By.XPATH, "//span[contains(., 'Hotel Washington')]")))
element.click()
0 голосов
/ 09 февраля 2020

Попробуйте этот xpath: // span [text () = 'Hotel Washington'] / parent :: a

Также обратите внимание, что метод "find_element_by_xpath ()" в ответах взят из версии 4 Selenium который все еще находится в фазе альфа-тестирования. Скорее всего, вы будете использовать Selenium версии 3. Действительный код для версии 3:

driver.findElement(By.xpath("//span[text()='Hotel Washington']/parent::a")),click();
0 голосов
/ 09 февраля 2020

Используйте

xPath = //*[contains(@text(),'Hotel Wahington')]

ИЛИ

//a[@class='hotel_name_link url']//*[contains(@text(),'Hotel Wahington')]
0 голосов
/ 09 февраля 2020

Используя xpath, вы можете go добавить к родительскому элементу ..

driver.find_element_by_xpath('//span[.="Hotel Washington"]/..')

или найти элемент с указанным c text

driver.find_element_by_xpath('//a[span[.="Hotel Washington"]]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...