2017-03-17 88 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