【问题标题】:Python Selenium table iteration not workingPython Selenium 表迭代不起作用
【发布时间】:2021-05-09 19:45:39
【问题描述】:

我是 Python Selenium 的新手,我正在尝试在 iframe 中自动执行一些网页抓取。 我正在尝试进入一个表格(在 iframe 内部)并单击一个链接。 一切正常,但是在引用表列时,代码似乎在每次迭代中都坚持第一列的值。 这是我的一些代码:

1 table = driver.find_element_by_xpath("//table[@class='table table-striped v-align-middle']")
2 rows = table.find_elements_by_css_selector("tr")
3 for row in rows:
4     print(row.text)
5     print(row.find_element_by_xpath("//td[3]").text)
6     row.find_element_by_xpath("//td[6]//a[@href]").click()

第 4 行让我获得了每一行的全部文本,完美运行。这只是一条测试线。 第 5 行每次都为我获取第一行的第三列值。所以不工作。 第 6 行,就像第 5 行一样,每次都点击第 6 列但第一行的链接。再说一遍,不工作

我认为 xpath 上一定有一些东西我做得不对? 谢谢!

我真的不明白为什么第 4 行迭代很好,但第 5 行和第 6 行每次都坚持第一列的值。

【问题讨论】:

  • 我认为这与此 xpath 中的数字有关。 "//td[3]" 和此 xpath 中的数字。 "//td[6]//a[@href]"。尝试更改它们以查看会发生什么。
  • 在 //td 前面加一个点。 .//td 等也是如此。这告诉从当前行开始而不是从根开始
  • 在执行这段代码之前你是否已经切换到iframe?

标签: python selenium html-table iterator iteration


【解决方案1】:

当使用 XPath 并从给定元素开始搜索时,您必须在定位器的开头添加 .,例如

print(row.find_element_by_xpath(".//td[3]").text)
                                 ^ note the period

【讨论】:

  • 嗨 JeffC,我收到以下错误 -------------------------------- ------------------------------------------------------- NoSuchElementException Traceback(最近一次调用最后一次) in 3 for row in rows: 4 ----> 5 print(row.find_element_by_xpath(".//td[3]"))
  • 您需要检查定位器。由于您尚未发布相关的 HTML,因此我无法为您执行此操作。
  • 第一行没有包含 td 而是 th,这就是它没有找到它的原因。所以我跳过了那个并继续前进,它工作得很好。谢谢!
猜你喜欢
  • 2022-01-10
  • 2012-05-27
  • 2017-07-09
  • 2013-01-12
  • 2017-07-05
  • 2020-11-30
  • 1970-01-01
  • 2020-11-23
  • 2014-09-18
相关资源
最近更新 更多