Как я могу перебрать список элементов и извлечь определенную часть, используя Selenium и Python

1

Изображение 174551 На этой веб-странице " https://meshb.nlm.nih.gov/treeView " я хочу выполнить итерацию по каждому узлу дерева, и если я увижу в своих предметах слово "сердечно-сосудистые...", я хотите создать словарь, в котором перечислены узлы верхнего уровня, а также все связанные с сердечно-сосудистой системой предметы. Например, на приведенной выше странице вы можете увидеть, что если вы развернете "Анатомия [A]", вы увидите сердечно-сосудистую систему. Теперь я хочу эту часть вместе с тем, что входит в сердечно-сосудистую систему, если вы ее расширите. Часть html-страницы, которую я хочу перебирать через некоторые ее элементы, выглядит следующим образом:

<a class="ng-scope">
   <span class="ng-binding ng-scope">Anatomy [A]</span>
</a>
    <ul class="treeItem ng-scope">
        <li class ="ng-scope" >
              < a  class ="ng-scope" href="/record/ui?ui=D001829" >
              < span  class ="ng-binding ng-scope" > Body Regions[A01] < / span >
              </a>
        </li>
        < li class ="ng-scope" >
              <a  class ="ng-scope" href="/record/ui?ui=D001829" >
                < span  class ="ng-binding ng-scope" > Cardio Vascular< / span >
              </a>
                    <ul class="treeItem ng-scope">
                        <li class="ng-scope">
                           <a class="ng-scope" href="/record/ui?ui=D015824">
                           <span class="ng-binding ng-scope">Blood-Air Barrier [A07.025]</span>
                           </a>
                                 <ul class="treeItem ng-scope">                    
                                   <li class="ng-scope">
                                       <a class="ng-scope" href="/record/ui?ui=D018916">
                                       <span class="ng-binding ng-scope">Blood-Aqueous Barrier [A07.030]</span>                        
                                       </a>
                                    </li>
                                 </ul>
                        </li>
                    </ul>
        </li>
    </ul>

..... и вот что я смог сделать до сих пор! в Python; В качестве первого шага я хотел итерации через узлы верхнего уровня и найти слово "сердечно-сосудистые". Но я все время вижу ошибку "нет такого элемента: невозможно найти элемент". Может ли кто-нибудь сказать мне, что мне здесь не хватает?

from selenium import webdriver
chrome_path=r"G:\My Drive\A\chrome_driver\chromedriver_win32\chromedriver.exe"
driver=webdriver.Chrome(chrome_path)
driver.get('https://meshb.nlm.nih.gov/treeView')
for links in driver.find_elements_by_css_selector('a.ng-scope'):
    cardio = links.find_element_by_css_selector('li>a>span.ng-binding.ng-scope')        
    print(cardio.text)
Теги:
selenium

1 ответ

0

В вашем коде есть некоторые проблемы. Вы не можете перебирать список, если не нажмете на значок "+" на родительском узле.

В вашем коде я вижу, что вы создали список, содержащий родительские узлы, такие как Anatomy, Organisms и т.д., Но вы не написали код для расширения списка.

Шаги, которые вы должны соблюдать:

  1. Храните родительские узлы в списке => Этот шаг описан в вашем коде.
  2. Итерации через каждый родительский узел, щелкнув по значку разворота (+ значок) =>, нужно покрыть.
  3. Храните дочерние узлы в списке и итерации через дочерние узлы, а также => нужно покрыть
  4. Продолжайте повторять, если вы не найдете, чтобы дочерний узел "сердечно-сосудистый" => нуждался в покрытии.
  5. Нажмите на значок + перед дочерним узлом "сердечно-сосудистой" и сохраните элементы под узлом "сердечно-сосудистые" в словаре =>.

Я создал код, который охватывает 1, 2 и 3 шаги для вас. Пожалуйста, действуйте точно так же.

from selenium import webdriver
chrome_path=r"G:\MyDrive\A\chrome_driver\chromedriver_win32\chromedriver.exe"
driver=webdriver.Chrome(chrome_path)
driver.get('https://meshb.nlm.nih.gov/treeView')
for links in driver.find_elements_by_css_selector('a.ng-scope'):
    links.find_element_by_xpath("./following-sibling::span/i[1]").click();
      for sublinks in links.find_elements_by_xpath('./following-sibling::ul/li//a'):
        print(sublinks.text)

У меня есть java-фон, поэтому, пожалуйста, простите меня за любые синтаксические проблемы, связанные с языком.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню