Как получить все теги td [3] из тегов tr с помощью selenium Xpath в python - PullRequest
0 голосов
/ 24 октября 2018

У меня есть веб-страница HTML, например:

<table class="table_type1" id="sailing">
  <tbody>
    <tr>
      <td class="multi_row"></td>
      <td class="multi_row"></td>
      <td class="multi_row">1</td>
      <td class="multi_row"></td>
    </tr>
    <tr>
      <td class="multi_row"></td>
      <td class="multi_row"></td>
      <td class="multi_row">1</td>
      <td class="multi_row"></td>
    </tr>
  </tbody>
</table>

и теги tr являются динамическими, поэтому я не знаю, сколько их существует, мне нужны все td [3] любых тегов tr всписок для нарезки мелочей. Итерирование с помощью встроенных инструментов намного лучше, если в find_element(s)_by_xpath("") есть инструменты итерации.

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Для печати текста, например, 1 из каждого третьего <td>, вы можете использовать метод get_attribute() или свойство text и любое из следующих решений:

  • Использование CssSelector и get_attribute():

    print(driver.find_elements_by_css_selector("table.table_type1#sailing tr td:nth-child(3)").get_attribute("innerHTML"))
    
  • Использование CssSelector и text свойство:

    print(driver.find_elements_by_css_selector("table.table_type1#sailing tr td:nth-child(3)").text)
    
  • Использование XPath и get_attribute():

    print(driver.find_elements_by_xpath('//table[@class='table_type1' and @id="sailing"]//tr//following::td[3]').get_attribute("innerHTML"))
    
  • Использование XPath и text свойство:

    print(driver.find_elements_by_xpath('//table[@class='table_type1' and @id="sailing"]//tr//following::td[3]').text)
    
0 голосов
/ 24 октября 2018

Попробуйте

cells = driver.find_elements_by_xpath("//table[@id='sailing']//tr/td[3]")

, чтобы получить третью ячейку каждой строки

Редактировать

Для итерации просто используйте цикл for:

print ([i.text for i in cells])
0 голосов
/ 24 октября 2018

Чтобы получить 3-е число в каждой строке, вы можете попробовать либо с помощью xpath

driver.find_elements_by_xpath('//table[@id="sailing"]/tbody//td[3]')

, либо вы можете попробовать с помощью селектора css, например

driver.find_elements_by_css_selector('table#sailing td:nth-child(3)')

Поскольку он возвращает списокВы можете повторять для каждого,

elements=driver.find_elements_by_xpath('//table[@id="sailing"]/tbody//td[3]')

for element in elements:
    print(element.text)
0 голосов
/ 24 октября 2018

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

tdElements = driver.find_elements_by_xpath("//table[@id="sailing "]/tbody//td")

Редактировать: для 3-го элемента

tdElements = driver.find_elements_by_xpath("//table[@id="sailing "]/tbody/tr/td[3]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...