Как извлечь значение из элемента <td>в таблице с помощью Selenium и Python - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь извлечь значение 1 из таблицы с помощью Selenium, но не нахожу хорошего способа сделать это.

<td width="1%" style="text-align: right">1</td>

Вот как выглядит страница HTML:

<tr class="linhaPar" onMouseOver="javascript:this.style.backgroundColor='#C4D2EB'" onMouseOut="javascript:this.style.backgroundColor=''">
   <td>
      Scientific American
   </td>
   <td>
      A Base Molecular da Vida  Uma Introducao a Biologia Molecular
   </td>
   <td>
   </td>
   <td>
      <table width="100%">
         <tbody style="background-color: transparent;">
            <tr>
               <td>
                  1971
               </td>
            </tr>
         </tbody>
      </table>
   </td>
   <td width="1%" style="text-align: right">
      1
   </td>
   <td width="1%">	
      <a id="formBuscaPublica:ClinkView" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('formBuscaPublica'),{'formBuscaPublica:ClinkView':'formBuscaPublica:ClinkView','idTitulo':'39117','idsBibliotecasAcervoPublicoFormatados':'47_46','apenasSituacaoVisivelUsuarioFinal':'true'},'');}return false"><img id="formBuscaPublica:ImageView" src="/sigaa/img/view.gif" style="border:none" title="Visualizar Informa&ccedil;&otilde;es dos Materiais Informacionais" /></a>
   </td>

Я пробовал использовать этот код, но он вообще не работал.

x = browser.find_elements_by_xpath('//*[@id="listagem"]/tbody/tr[1]/td[5]/').text

Спасибо!

Ответы [ 4 ]

1 голос
/ 26 мая 2020

Попробуйте следующий xpath:

x = driver.find_element_by_xpath('//tr[@class="linhaPar" and contains(.,"Scientific American")]//td[contains(@style, "text-align")]').text
print(x)

Примечание :

Не используйте .find_elements, а .find_element

0 голосов
/ 26 мая 2020

Чтобы извлечь текст 1 из элемента:

<td width="1%" style="text-align: right">1</td>

Вы можете использовать любое из следующих решений на основе :

  • Использование текста Scientifi c American :

    print(browser.find_elements_by_xpath("//td[contains(., 'Scientific American')]//following::td[3]//following-sibling::td[1]").text)
    
  • Использование текста Базовая молекула da Vida Uma Introducao a Биология Молекулярная :

    print(browser.find_elements_by_xpath("//td[contains(., 'A Base Molecular da Vida  Uma Introducao a Biologia Molecular')]//following::td[2]//following-sibling::td[1]").text)
    
0 голосов
/ 26 мая 2020

В виде структуры таблицы и представления данных в строках и столбцах. Вы можете go с поиском значения на основе определенных c данных. Итак, в вашем случае, допустим, вы хотите получить значение 1 на основе «Scientifi c American», затем go с указанным ниже xpath -

x = browser.find_elements_by_xpath("//tr/td[contains(.,'Scientific American')]/following-sibling::td[4]").text
0 голосов
/ 26 мая 2020

Вот как бы я это сделал: я создал функцию многократного использования, которая возвращает первый элемент по тегу и соответствующим атрибутам.

def getElementByTagAndAttributes(browser, tag, **kwargs):
    for element in browser.find_elements_by_tag_name(tag):
        for key, value in kwargs.items():
            attribute = element.get_attribute(key)
            if attribute != value:
                break
        else:
            return element

x = getElementByTagAndAttributes(browser, "td", width="1%", style="text-align: right").text
...