我目前在Selenium中填充Python中的列表,包含所有表行值。
我想现在,在每行数据的末尾放置一个中断,并使用表头作为键。我不确定如何最好地表示字典中的表格数据。但我唯一的要求是我可以通过表和行标题查询它(行标题是每行中的第一个值)。
表格......
shinyServer(function(input, output) {
data <- reactive({
validate(
need(input$data != "", "Please select a data set")
)
get(input$data, 'package:datasets')
})
output$plot <- renderPlot({
hist(data()[, 1], col = 'forestgreen', border = 'white')
})
output$table <- renderTable({
warning("Warning message.")
head(data())
})
})
我在简化表中包含了colspan,类等,以防它们有用。
<table class="confluenceTable tablesorter">
<thead>
<tr class="sortableHeader">
<th data-column="0" class="confluenceTh sortableHeader tablesorter-headerSortDown">
<div class="tablesorter-header-inner">First Name</div>
</th>
<th data-column="1" colspan="1" class="confluenceTh sortableHeader">
<div class="tablesorter-header-inner">Last Name</div>
</th>
<th data-column="2" class="confluenceTh sortableHeader">
<div class="tablesorter-header-inner">Function</div>
</th>
</tr>
</thead>
<tbody class="">
<tr>
<td colspan="1" class="confluenceTd">John</td>
<td colspan="1" class="confluenceTd">Smith</td>
</tr>
<tr>
<td colspan="1" class="confluenceTd"><span>Jane</span></td>
<td colspan="1" class="confluenceTd"><span>Doe</span></td>
</tr>
</tbody>
</table>
使用上面的python我可以得到
def get_test_data(driver):
table = driver.find_element_by_xpath("//table")
rawdata = []
for td in table.find_elements_by_tag_name('td'):
rawdata.append(td.text)
pprint(rawdata)
我想要
[u'John',
u'Smith',
u'Jane',
u'Doe']
或类似的东西,所以我可以在字典中查询数据。
答案 0 :(得分:2)
使用我提到的html
代码段:
assign_headers.py
的一部分first_names = map(lambda el: el.text, browser.find_elements_by_xpath('//tr/td[1]'))
second_names = map(lambda el: el.text, browser.find_elements_by_xpath('//tr/td[2]'))
headers = map(lambda el: el.text, browser.find_elements_by_xpath('//th/div'))
print [{headers[0]: first_names[i], headers[1]: second_names[i]} for i in range(len(first_names))]
行动中:
In [1]: run assign_headers.py
[{u'Last Name': u'Smith', u'First Name': u'John'}, {u'Last Name': u'Doe', u'First Name': u'Jane'}]
答案 1 :(得分:-1)
这应该有用 - 它没有经过测试但应该接近:
rawdata = []
headdata = []
for tr in table.find_elements_by_tag_name('tr'):
tmp = {}
for th in tr.find_elements_by_tag_name('th'):
headdata.append(append(th.text)
ii = 0
for td in tr.find_elements_by_tag_name('td'):
tmp[headdata[ii]] = td.text
ii += 1
rawdata.append(tmp)
你可以从thead获取标题,从tbody获取tr行