python-3.x - Selenium 试图遍历一个表,但现在卡在第一个表上
问题描述
我在这里有点头疼,我正在使用 Python 3 和 selenium 处理一张桌子。我正在尝试从表 ( tblGuid
) 中提取一些数据,并从几列中获取一些信息。
虽然数据可能被正确检索(len(rows)
打印预期的行数),但迭代器似乎卡在第一个元素上,只socket
重复打印相同的内容,打印数量匹配len(rows)
vlan = "vlan14"
time.sleep(3)
# Enter filter for vlan
print("Filtered by vlan: " + vlan)
browser.find_element_by_xpath("/html/body/div[1]/div[4]/div[3]/div[4]/div/div[2]/div/div[1]/div[3]/div/table/tfoot/tr/th[13]/input").send_keys(vlan)
# Sort by socket
browser.find_element_by_xpath("/html/body/div[1]/div[4]/div[3]/div[4]/div/div[2]/div/div[1]/div[1]/div/table/thead/tr/th[14]").click()
time.sleep(2)
table = browser.find_element_by_id('tblGuid')
rows = table.find_elements_by_xpath(".//tr")
time.sleep(2)
print("Len: ", len(rows))
for row in rows:
socket = row.find_element_by_xpath('//td[10]').text
print("Socket: ", socket)
# Other stuff of the same natures as the above two lines go here. Get a different column and assign it to a variable.
browser.quit()
我正在使用 Firefox 运行此代码,而不是打开无头模式,以确认所有点击、排序和过滤器都按预期应用。浏览器输出看起来和预期的一样,数据都在那里,socket 是一个在 1 到 52 之间变化的数字,大约 50 行。在我看来,for
循环卡在rows
.
我添加了很多(可能是多余time.sleep()
的,以确保页面正确加载,以便我可以看到页面随着脚本的进行而更新。
值得一提的是,我正在抓取的页面不包含 HTML 中的表格数据,因为它是由在数据库上运行的 javascript 填充的。起初我认为这是问题所在,但作为套接字打印的数据与表的第一行匹配(与任何其他列一样)这一事实告诉我正在正确检索数据,但我无法对其进行迭代.
编辑 - HTML 的清理版本
<table id="tblGuid" class="table table-striped table-hover table-condensed detailedTable table-bordered dataTable" style="width: 99.9%;" role="grid" aria-describedby="tblGuid_info">
<tbody>
<tr role="row" class="odd">
<td><button class="tableButton regguid" data-guid="0046ca">Reg.</button></td>
<td>0046ca</td>
<td>0110F17754</td>
<td>A18122</td>
<td><a href="detail?serial=37530" target="_blank">37530</a></td>
<td>05929a</td>
<td>3.0.0</td>
<td>19-12-21 19:56</td>
<td>20-01-19 19:53</td>
<td>20-01-19 19:53</td>
<td>20526661632</td>
<td>1</td>
<td>vlan14</td>
<td class="sorting_1">1</td>
<td>0</td>
<td><a data-node-error="0" data-node-guid="0046ca" href="#"> 0</a></td>
<td><a href="qc?rclId=1279" target="_blank">145811</a></td>
<td>5554</td>
<td>152263</td>
<td>Done</td>
</tr>
<tr role="row" class="even">
<td><button class="tableButton regguid" data-guid="004aa4">Reg.</button></td>
<td>004aa4</td>
<td>0110F17D8D</td>
<td>A19108</td>
<td><a href="detail?serial=37740" target="_blank">37740</a></td>
<td>05936c</td>
<td>3.0.0</td>
<td>19-12-21 20:15</td>
<td>20-01-19 19:54</td>
<td>20-01-19 19:54</td>
<td>20517699584</td>
<td>1</td>
<td>vlan14</td>
<td class="sorting_1">2</td>
<td>0</td>
<td><a data-node-error="0" data-node-guid="004aa4" href="#"> 0</a></td>
<td><a href="qc?rclId=1277" target="_blank">147011</a></td>
<td>5548</td>
<td>152311</td>
<td>Done</td>
</tr>
</tbody>
</table>
对上述 HTML 的注释:
- 为了便于阅读,删除了大约 40 个表格行。
- 表格页眉和页脚已被删除。
- 出于本文的目的,单元格中的一些数据已被更改。结构保持不变。
- 这就是它在 Firefox 中“检查元素”下的显示方式。
- python代码中引用的xpath基于inspect元素下的“copy -> xpath”。
解决方案
如果没有表格 html,这是我最好的猜测。看起来 xpath 并没有达到预期的效果。尝试使用:find_element_by_xpath('.//td[10]').text
for row in rows:
columns = row.find_elements_by_xpath('.//td')
for column in range(len(columns)):
print("column::{}:".format(column), columns[column].text)
#testsocket = columns[9].text
socket = row.find_element_by_xpath('.//td[10]').text
print("Socket: ", socket)
#print("TestSocket: ", testsocket)
推荐阅读
- rest - 幂等PUT请求中的异常?
- javascript - 基本名称不起作用连接反应路由器
- python - python中的Scraable游戏
- java - 我正在使用 NotifydataAdapter 但是当数据库上的值发生变化时它不起作用;
- asp.net-mvc - 在 ASP.NET MVC 中绑定二维数组
- android - 在 CircleCI 上 ReactNative 0.59.x 构建失败,退出值为 137
- javascript - 如何在聊天中为用户定义颜色
- java - java流过滤器与if-else条件,哪个更快?
- node.js - 使用 GraphicsMagick 重新着色图像
- javascript - highchart中不相关的图表线