迭代 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 值? 你试过解决方案了吗? tdtr 的直接后代,因此您需要./td 而不是.//td

以上是关于迭代 xpath(表格行)python的主要内容,如果未能解决你的问题,请参考以下文章

相对XPath错误地选择循环中的相同元素

Pythonpython-object.py

PythonPython实现斐波那契数列

PythonPython获取命令行參数

Pythonpython 命令行参数模块解析 定义

为什么在for循环的第二次迭代中找不到XPATH