【问题标题】:Loop through rows to get column data using selenium and python使用 selenium 和 python 遍历行以获取列数据
【发布时间】:2017-03-17 16:53:18
【问题描述】:

我正在尝试使用 Python 3.6 和 Selenium 从表格中获取数据。我试图从中获取的表之一有多行。所以,我想从每一行中获取第 9 列。

我在这个网站上四处搜索,发现了一些我几乎可以适应的代码。

table_id = driver.find_element(By.ID, 'ctl00_mid_rptItems_ctl00_gvItems')
rows = table_id.find_elements(By.TAG_NAME, "tr")
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")  
    for col in cols:
        print (cols[8].text)

它从我想要的列中吐出正确的数据,但我遇到的问题是它循环遍历每一行 16 次,这是表中的列数,并打印每个数据点 16 次。

我试图通过删除“for col”循环来调整上面的代码,以便将每一列吐出 1 次

table_id = driver.find_element(By.ID, 'ctl00_mid_rptItems_ctl00_gvItems')
rows = table_id.find_elements(By.TAG_NAME, "tr")
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")
    print (cols[8].text)

但是,这会给出错误“回溯(最近一次调用最后一次): 文件“C:\Users\Documents\PleaseTest_R1.py”,第 91 行,在
打印 (cols[8].text) IndexError: 列表索引超出范围

关于如何让这个循环工作的任何想法?
非常感谢你的帮忙! :-)

【问题讨论】:

  • 如果您使用 WATIR(Ruby 制作的 Selenium 包装器),则不必面对这些问题,因为它为您提供了像 b.table.rows.each 这样的好语法。因此,解决您的问题的方法是,如果您在 Chrome 或 Mozilla 中工作,请使用 JavaScript。如果你在 IE 中工作,那么 JavaScript 也不是解决方案
  • 感谢您的建议。如果可能的话,我希望能够用 Python 完成所有的事情。

标签: python loops selenium multiple-columns rows


【解决方案1】:

我可以建议你使用 Javascript,通过你的 python 程序执行这个 JavaScript,它会工作的。

从单元格中获取内容的系统税,

document.getElementId("tableid").rows[3].cells[4].innerHTML

你可以通过

获得行数
document.getElementId("tableid").rows.length

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2023-03-05
    • 2020-08-28
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多