Согласно HTML, которым вы поделились, у каждого tr есть три элемента, текстовое поле, поле выбора и кнопка.
Также на снимке экрана для сохраненной записи я не вижу поля ввода.Например, текст user1.Я предполагаю, что user1 находится внутри тега span.как
<td>
<div>user1</div>
</td>
Вы должны обрабатывать каждый элемент по-разному, чтобы получить значение из него.
- Чтобы получить innerText в div, мы должны использовать
elem.text
- Чтобы получить значение атрибута входного текстового поля, мы должны использовать
elem.get_attribute('value')
- Чтобы получить выбранное значение, мы должны использовать
Select(elem).first_selected_option
Это пример кода, чтобы получить данные вашего домена.Пожалуйста, свободно редактировать в соответствии с вашими потребностями.Я использовал селекторы CSS, чтобы найти элементы.Смотрите здесь для синтаксиса.
# This returns all the tr elements in the table
rows = driver.find_elements_by_css_selector("table#sec_user_table>tbody>tr")
for i in range(1, len(rows)):
# This returns only the span, input which is not password and select elements
cols = rows[i].find_elements_by_xpath("td//*[self::div[not(.//input)] or self::input[@type='text'] or self::select]")
for col in cols:
if col.tag_name == 'SELECT':
print(Select(col).first_selected_option.text) # To get the select value
elif col.tag_name == 'INPUT':
print(col.get_attribute('value')) # To get the input value
else:
print(col.text) # To get text fron span
или
Простое решение с одиночными селекторами:
Это относится кваш случай, поскольку вы не нуждаетесь в элементе ввода полностью
# This returns all the tr elements in the table
rows = driver.find_elements_by_css_selector("table#sec_user_table>tbody>tr")
for i in range(1, len(rows)):
username = rows[i].find_element_by_xpath("//div[not(.//input)]")
print(username.text)
select = rows[i].find_elements_by_css_selector("select")
for col in cols:
print(Select(col).first_selected_option.text) # To get the select value