2017-03-17 54 views
1

我试图使用Python 3.6和Selenium从表格中获取数据。我试图抓住的表格之一有多行。所以,我想从每一行中获得第9列。循环遍历行以使用硒和python获取列数据

我在这个网站上搜索了一下,发现了一些代码,我几乎可以适应几乎所有的工作。

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次。

我试着去适应以上通过移除了“山坳”循环

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) 

但是,仅仅吐出每列1时的代码,这使错误“回溯(最近通话最后一个): 文件 “C:\用户\文档\ PleaseTest_R1.py”,行91,在
打印(的cols [8]的.text) IndexError:列表索引超出范围

我如何能得到这个任何想法循环工作?
非常感谢您的帮助!:-)

+0

如果您使用的Watir(由红宝石制成硒包装),你没有得到行数面对这些问题,因为它给了你像'b.table.rows.each'这样的好语法。因此,解决您的问题的方法是,如果您使用的是Chrome或Mozilla,请使用JavaScript。如果您在IE中工作,那么JavaScript也不是解决方案 – RAJ

+0

谢谢您的建议。如果可能的话,我希望能够在Python中完成整个事情。 –

回答

0

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

Systax把内容从细胞,

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

,您可以通过

document.getElementId("tableid").rows.length