Selenium Python: поиск span, вложенного в div с определенным атрибутом css

#python #xml #selenium #xpath

#python #xml #селен #xpath

Вопрос:

Я пытаюсь создать веб-скребок для общедоступных записей. В настоящее время в моем HTML есть несколько «карточек» с информацией о свойствах, включая адрес и номер фолио. Каждая карточка имеет следующий HTML.

 <div class="results_record ng-scope" ng-repeat="candidate in candidatesList.candidates | orderBy:['siteAddress']">
        
        <span class="record_number ng-binding">1</span>
        
        
        <div class="record_folio ng-binding"><strong>FOLIO:</strong>           
            <span ng-click="getCandidateFolio(candidate.folio)" class="ng-binding">01-4138-159-0001</span> (Reference)
        </div>
        

    </div><!-- end ngRepeat: candidate in candidatesList.candidates | orderBy:['siteAddress'] --><div class="results_record ng-scope" ng-repeat="candidate in candidatesList.candidates | orderBy:['siteAddress']">
        
 

Я хотел бы выбрать текст номера фолио (например, 01-4138-159-0001 для этого примера) для каждой карты.Мой код выглядит следующим образом с Selenium для Python, и я не получаю никаких результатов:

 folios =  driver.find_elements_by_xpath('//span[@ng-click="getCandidateFolio(candidate.folio"]')
for folio in folios:
print(folio.text)
 

Есть ли лучший способ выбора номера фолио?

Комментарии:

1. Вы получаете какое-либо сообщение об ошибке? Кроме того, вы не закрыли свои скобки после candidate . фолио.

2. @RhysFlook Спасибо, после закрытия скобок я теперь получаю: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//span[@ngclick="getCandidateFolio(candidate.folio)"]"}

Ответ №1:

 folios =  driver.find_elements_by_xpath('//span[@ng-click="getCandidateFolio(candidate.folio)"]')

for folio in folios:
      print(folio.text)
 

Отсутствовал ) .Затем просто используйте .text или get_attribute(‘textContent’) для него.

Комментарии:

1. Спасибо за ваш ответ. С этим кодом теперь я получаю сообщение об ошибке: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//span[@ngclick="getCandidateFolio(candidate.folio)"]"} на каждой карточке есть 1 фолио, которое я хочу найти, но я хотел бы найти фолио со всех карточек на странице, будет ли find_element лучшим способом сделать это?

2. Забыл a — и тогда find_elements будет тем, что нужно.

3. Все еще не повезло, у меня то же сообщение. Какой метод поиска я мог бы использовать вместо этого?

4. Есть ли это в каких-либо фреймах iframes?

Ответ №2:

Я понял! Использование:

 folios =  driver.find_elements_by_class_name('record_folio')
 

и, что самое главное, пришлось добавить time.sleep(30), поскольку страница, по-видимому, загрузилась не полностью. Спасибо всем за помощь!