Как мне заставить Selenium переключиться на другую активную вкладку на странице?

#python #selenium-webdriver #xpath #selenium-chromedriver

#python #selenium-webdriver #xpath #selenium-chromedriver

Вопрос:

Я новичок в Python и нуждаюсь в некоторой помощи.

Я использую Python Selenium — Chrome для извлечения данных, и мне нужен мой скрипт на Python, чтобы иметь возможность переключаться между параметрами, которые отображаются в виде вкладок на веб-странице.

Пробовал несколько способов заставить браузер определить и щелкнуть вкладку, на которую мне нужно переключиться, но этого просто не происходит, и отображается ошибка для поля, которое я хочу заполнить на этой вкладке:

         <div id="tabbed-nav">            
            <ul>
                <li><a>Diary Number</a></li>
                <li><a>Case Number</a></li>
                <li><a>Party Name</a></li>
                <li><a>AOR</a></li>
                <li><a>Court / Tribunal</a></li>
  

Дефекты подачи ->

                 <li><a>Free Text</a></li>
            </ul>          
            <div>
  

Вот два способа, которыми я пытался заставить скрипт щелкнуть вкладку, которая по какой-то причине не работает

 Object.find_element_by_xpath("//*[@id='tabbed-nav']/ul[1]/li[3]").click()

Object.find_element_by_xpath("//div[@id='tabbed-nav']/ul/li/a[.="Party Name"]').click()
  

Ответ №1:

Прежде чем мы проанализируем ваши две попытки, позвольте мне вставить текущее (упрощенное) DOM-дерево рассматриваемой страницы для дальнейшего использования:

 <div id="tabbed-nav">
   <ul class="z-tabs-nav z-tabs-mobile">
      <li><a><span class="z-title">Diary Number</span><span class="z-arrow"></span></a></li>
   </ul>
   <i class="z-dropdown-arrow"></i>
   <ul class="z-tabs-nav z-tabs-desktop">
      <li class="z-tab z-first z-active" data-link="tab1"><a class="z-link">Diary Number</a></li>
      <li class="z-tab" data-link="tab2"><a class="z-link">Case Number</a></li>
      <li class="z-tab" data-link="tab3"><a class="z-link">Party Name</a></li>
      <li class="z-tab" data-link="tab4"><a class="z-link">AOR</a></li>
      <li class="z-tab" data-link="tab5"><a class="z-link">Court / Tribunal</a></li>
      <li class="z-tab z-last" data-link="tab6"><a class="z-link">Free Text</a></li>
   </ul>
   <div class="z-container">
      <!-- skipped -->
   </div>
</div>
  

А теперь анализ ваших двух попыток:

Попытка № 1

 Object.find_element_by_xpath("//*[@id='tabbed-nav']/ul[1]/li[3]").click()
  

В вашем есть два ul тега //*[@id='tabbed-nav'] — первый для мобильной версии страницы, а второй для настольной версии страницы.
Вы выбираете первый ( /ul[1] ), который содержит только один <li> тег, в то время как вы запрашиваете 3-й. Вот почему элемент не найден.

Попытка № 2

 Object.find_element_by_xpath("//div[@id='tabbed-nav']/ul/li/a[.="Party Name"]').click()
  

Это почти правильно! В " and просто беспорядок ' . Далее следует правильная строка с xpath:

 Object.find_element_by_xpath("//div[@id='tabbed-nav']/ul/li/a[.='Party Name']").click()
  

Это хорошо работает для текущей структуры DOM.

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

1. Второй вариант сработал, ценю вашу помощь. Спасибо.

2. @Kunal Вы можете принять один ответ (если это вам поможет), нажав на большую серую кнопку проверки с левой стороны. При желании вы можете добавить 10 баллов любому автору любого хорошего ответа, щелкнув верхний серый треугольник