【发布时间】:2015-11-18 11:52:33
【问题描述】:
我正在尝试借助索引来定位元素。
目前我使用下面的xpath通过提供匹配的索引值来识别。//table/tbody/tr[@index='1']
如何定位具有最大索引值的元素?
【问题讨论】:
标签: python python-3.x selenium selenium-webdriver
我正在尝试借助索引来定位元素。
目前我使用下面的xpath通过提供匹配的索引值来识别。//table/tbody/tr[@index='1']
如何定位具有最大索引值的元素?
【问题讨论】:
标签: python python-3.x selenium selenium-webdriver
您可以使用内置的max 函数,将key 参数指定为检索index 属性的函数。
# Setup
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://example.com')
rows = browser.find_elements_by_xpath("//table/tbody/tr")
# Solution
max_element = max(rows, key=lambda e: e.get_attribute('index'))
如果 lambda 看起来有点混乱,您可以将其分解为一个普通函数:
def get_index(element): return element.get_attribute('index')
max_element = max(rows, key=get_index)
如果您需要多个最大值,我会在每个上调用 get_attribute 并将其传递给 max 以获得最大值 index,然后再次遍历列表以获得最大值:
max_index = max(e.get_attribute('index') for e in rows)
max_elements = [e for e in rows if e.get_attribute('index') == max_index]
【讨论】:
你可以试试这样的。我认为没有直接找到最高值的 xpath。
trs = driver.find_elements_by_xpath("//table/tbody/tr")
max = 0
i = 0
for index, tr in enumerate(trs):
if max < int(tr.get_attribute('index')):
max = int(tr.get_attribute('index'))
i = index
max = trs[i]
# If there are more than one elements with the same max value
maxs = driver.find_elements_by_xpath("//table/tbody/tr[@index='" + str(max) + "']")
【讨论】:
trs。我已经编辑了答案。请再次检查。
Below code worked for me:
trs = driver.find_elements_by_xpath("//table/tbody/tr")
max = 0
i = 1
for tr in trs:
if max < int(tr.get_attribute('index')):
max = int(tr.get_attribute('index'))
i = max
print (str(i))
【讨论】: