Хобрук: Ваш путь к мастерству в программировании

Как получить текст вне div?

<div class="amlocator-store-information" style="" xpath="1"> 
  <div class="amlocator-title" style="">The Better Health Store</div>
  2420 E-Stadium Ann Arbor MI 48104
  <br><br>
  (613) 975-6613
  <div style="" class="amasty_distance" id="amasty_distance_1">Distance:                            
    <span class="amasty_distance_number"></span>
  </div>
</div>

Я использую селен с питоном и пытаюсь получить адрес из DOM, но не могу, я использовал

store_block_list  = '//div[@class="amlocator-store-information"]'
store_block_list = '//div[@class="amlocator-title"]'

чтобы захватить элементы, но не могу получить адрес, так как вы можете видеть, что адрес находится за пределами элемента //div. Обратите внимание, что это список элементов, и затем я использую цикл for для обхода списка элементов


  • Локатор //div[@class=amlocator-store-information] должен дать вам нужный div, а вы не можете захватить этот текст? 18.02.2020
  • @DMart, когда я использую element.text, я получаю The Better Health Store 2420 E-Stadium Ann Arbor MI 48104 (613) 975-6613 Расстояние: 600 миль Я не могу полагаться на обратную нарезку, потому что 600 миль могут измениться на 5000, что я и делаю. предполагая, что испортятся индексы, которые я пытаюсь захватить. 19.02.2020

Ответы:


1

Чтобы извлечь адрес, например 2420 E-Stadium Ann Arbor MI 48104, так как это текстовый узел, вам нужно вызвать WebDriverWait для visibility_of_element_located() с помощью execute_script() метод, и вы можете использовать любую из следующих стратегий поиска:

  • Использование CSS_SELECTOR:

    print(driver.execute_script('return arguments[0].childNodes[2].textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.amlocator-store-information")))).strip())
    
  • Использование XPATH:

    print(driver.execute_script('return arguments[0].childNodes[2].textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='amlocator-store-information']")))).strip())
    
  • Примечание. Вы должны добавить следующие импорты:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
18.02.2020
  • Это сработало, но было медленно, я думаю, из-за почти 2000 элементов. Является ли execute_script единственным методом, который можно подать в суд в этом случае? что-нибудь быстрее? driver.get(url) wait = WebDriverWait(driver, 30) storeElement = wait.until(EC.visibility_of_all_elements_located((By.XPATH, store_block_list))) full_list = [] для хранилища в storeElement: print(driver.execute_script('return аргументы[0].childNodes[2].textContent;', store).strip()) 19.02.2020
  • @Ronron Не могу комментировать, почему он был медленным, не видя соответствующий HTML, конфигурацию WebDriver, скорость сети, пропускную способность и версию используемых вами двоичных файлов. Однако следует отметить, что мы выбрали условие visibility_of_all_elements_located, которое является обязательным, прежде чем вы попытаетесь получить нужный текст из текстового узла. 19.02.2020
  • Почему вы используете execute_script? 20.02.2020
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..