#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), поскольку страница, по-видимому, загрузилась не полностью. Спасибо всем за помощь!