迭代 xpath(表格行)python
Posted
技术标签:
【中文标题】迭代 xpath(表格行)python【英文标题】:Iterate over an xpath (table row) python 【发布时间】:2021-08-20 00:35:24 【问题描述】:我的 xpath 如下:
/html/body/div[1]/table[3]/tbody/tr[1]/td[3]/a
/html/body/div[1]/table[3]/tbody/tr[2]/td[3]/a
/html/body/div[1]/table[3]/tbody/tr[3]/td[3]/a
/html/body/div[1]/table[3]/tbody/tr[4]/td[3]/a
如您所见,tr[] 值正在发生变化。我想遍历这些值。
下面是我用过的代码
search_input = driver.find_elements_by_xpath('/html/body/div[1]/table[3]/tbody/tr[3]/td[3]/a')
请告诉我如何迭代它们。
【问题讨论】:
【参考方案1】:选项 1:固定列号,如 3 需要迭代:
rows = len(self.driver.find_elements_by_xpath("/html/body/div[1]/table[3]/tbody/tr"))
for row in range(1, (rows + 1)):
local_xpath = ""/html/body/div[1]/table[3]/tbody/tr[" + str(row) + "]/td[3]"
# do something with element
# cell_text = self.driver.find_element_by_xpath(local_xpath ).text
选项 2:Row 和 Col 都需要迭代:
rows = len(self.driver.find_elements_by_xpath("/html/body/div[1]/table[3]/tbody/tr"))
columns = len(self.driver.find_elements_by_xpath("/html/body/div[1]/table[3]/tbody/tr/td"))
for row in range(1, (rows + 1)):
for column in range(1, (columns + 1)):
local_xpath = ""/html/body/div[1]/table[3]/tbody/tr[" + str(row) + "]/td[" + str(column) + "]"
# do something with element
# cell_text = self.driver.find_element_by_xpath(local_xpath ).text
【讨论】:
【参考方案2】:另一种选择,假设有 4 个元素:
for elem in range(1,5):
element = f"/html/body/div[1]/table[3]/tbody/tr[elem]/td[3]/a"
#e = driver.find_element_by_xpath(element)
#e.click()
print(element)
打印:
/html/body/div[1]/table[3]/tbody/tr[1]/td[3]/a
/html/body/div[1]/table[3]/tbody/tr[2]/td[3]/a
/html/body/div[1]/table[3]/tbody/tr[3]/td[3]/a
/html/body/div[1]/table[3]/tbody/tr[4]/td[3]/a
你可以对循环中的元素做任何你想做的事情,我只是打印出来显示值
【讨论】:
【参考方案3】:如果你想要每一行的所有第三个 td,使用这个:
search_input = driver.find_elements_by_xpath('/html/body/div[1]/table[3]/tbody/tr/td[3]/a')
如果您只想要前 3 行,请使用:
search_input = driver.find_elements_by_xpath('/html/body/div[1]/table[3]/tbody/tr[position() < 4]/td[3]/a')
通过 tds 循环查看 I.e.这个answer
【讨论】:
【参考方案4】:这可能不是您正在寻找的确切解决方案,但这就是您的想法。
tableRows = driver.find_elements_by_xpath("/html/body/div[1]/table[3]/tbody/tr")
for e in tableRows:
e.find_element_by_xpath(".//td[3]/a")
【讨论】:
如何迭代 tr 值? 你试过解决方案了吗?td
是tr
的直接后代,因此您需要./td
而不是.//td
以上是关于迭代 xpath(表格行)python的主要内容,如果未能解决你的问题,请参考以下文章