【问题标题】:Iterate over an xpath (table row) python迭代 xpath(表格行)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')

请告诉我如何迭代它们。

【问题讨论】:

    标签: selenium web-scraping xpath html-table webdriver


    【解决方案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
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-19
          • 1970-01-01
          • 1970-01-01
          • 2014-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多