Как найти элемент, два его дочерних элемента соответствуют двум разным значениям?

Я хочу использовать Python selenium, чтобы найти конкретный сервер на веб-сайте Speedtest. Например, я хочу найти сервер, хост-расположение которого — город Дагупан, а хост-спонсорUSATV One Inc< /сильный>. Ниже показано, как выглядит html-код. Внутри будет много одинаковых имен классов. Что мне делать, чтобы сопоставить два разных значения из этого? Спасибо!

<ul data-view-name="serverCollection" data-view-cid="view34" class=""><li data-model-cid="c184">
  <a data-server-id="11886" data-https-host="1">
      <span class="host-location">
        Dagupan City
      </span>
      <span class="host-sponsor">
        USATV One Inc
      </span>


  </a>
</li><li data-model-cid="c185">
  <a data-server-id="25314" data-https-host="1">
      <span class="host-location">
        Park City, Utah
      </span>
      <span class="host-sponsor">
        Utah Broadband
      </span>


  </a>
</li><li data-model-cid="c186">
  <a data-server-id="14515" data-https-host="1">
      <span class="host-location">
        Nagaoka
      </span>
      <span class="host-sponsor">
        CanopusAzusa
      </span>


  </a>
</li><li data-model-cid="c187">
  <a data-server-id="14890" data-https-host="1">
      <span class="host-location">
        Jakarta
      </span>
      <span class="host-sponsor">
        PT. Aplikanusa Lintasarta
      </span>


  </a>
</li></ul>

person LaoDa581    schedule 12.06.2019    source источник


Ответы (3)


Что-то типа:

//a[span[@class='host-location' and contains(text(),'Dagupan City')] and span[@class='host-sponsor' and contains(text(),'USATV One Inc')]]

Демо:

введите здесь описание изображения

Использованная литература:

person Dmitri T    schedule 12.06.2019
comment
Я использую find_elements_by_xpath для реализации вашего кода, и это работает! Однако он получит список, включающий два элемента. Это нормально? Я не могу найти другой элемент на своем веб-сайте. - person LaoDa581; 12.06.2019
comment
Разве a[contains(., 'Dagupan City') and contains(., 'USATV One Inc')] не сработает так же хорошо? - person Greg Burghardt; 12.06.2019

вы также можете попробовать

//span[@class='host-sponsor'][contains(text(),'USATV One Inc')]/parent::a/span[contains(text(),'Dagupan City')]/parent::a
person murali selenium    schedule 12.06.2019

Чтобы найти сервер по отношению к его дочерним элементам class атрибут host-location например. Город Дагупан и host-sponsor например. USATV One Inc, поскольку элементы являются динамическими, вам необходимо вызвать WebDriverWait для нужных элементов, и вы можете использовать следующий Стратегия поиска:

  • XPath:

    element = WebDriverWait(driver,15).until(lambda driver: driver.find_element_by_xpath("//a[span[@class='host-location' and contains(.,'Dagupan City')]]") and driver.find_element_by_xpath("//a[span[@class='host-sponsor' and contains(.,'USATV One Inc')]]"))
    
person DebanjanB    schedule 12.06.2019