【发布时间】: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