📅  最后修改于: 2023-12-03 15:07:49.213000             🧑  作者: Mango
动态 webtable 指的是表格中的数据不是固定的,而是依赖于用户的操作或者其他条件来变化。这给我们在测试和爬虫开发时带来了一定的挑战。本文介绍如何使用 Selenium 处理动态 webtable。
在处理动态 webtable 前,需要先安装 Selenium 库。可以通过以下命令安装:
pip install selenium
在 Selenium 中,首先需要加载需要处理的网页,然后通过定位器来定位表格元素。表格元素可以是 <table>
标签或者其他 HTML 元素,比如 <div>
和 <ul>
。
from selenium import webdriver
# 加载网页
driver = webdriver.Chrome()
driver.get("http://demo.guru99.com/test/web-table-element.php")
# 根据表格的类名定位表格元素
table = driver.find_element_by_class_name("dataTable")
通过定位器可以获取表格中的行和列。在 Selenium 中,可以使用 find_elements_by_xpath()
方法和 XPath 表达式来定位行和列。
# 获取表格中所有的行
rows = table.find_elements_by_xpath("//tbody/tr")
# 获取第一行中的所有列
cols = rows[0].find_elements_by_xpath("td")
获得了行和列后,我们可以使用 text
属性来获取文本数据。比如:
# 获取第一行第一列中的数据
print(cols[0].text)
# 获取第二行第三列中的数据
print(rows[1].find_elements_by_xpath("td")[2].text)
当表格中的数据发生变化时,我们需要重新定位行和列,然后获取数据。下面是一个处理动态 webtable 的例子,假设我们需要不停地点击表格中的“下一页”按钮直到获取到指定的数据。
while True:
# 获取表格中所有的行
rows = table.find_elements_by_xpath("//tbody/tr")
# 遍历所有行
for row in rows:
# 获取当前行中的所有列
cols = row.find_elements_by_xpath("td")
# 如果当前行符合条件,就输出其数据并返回
if cols[0].text == "Alabama" and cols[2].text == "Birmingham":
print(row.text)
return
try:
# 定位“下一页”按钮并点击
next_button = driver.find_element_by_xpath("//a[@id='example_next']")
driver.execute_script("arguments[0].click();", next_button)
# 等待页面加载完成
driver.implicitly_wait(10)
except:
# 如果没有“下一页”按钮了,就退出循环
break
使用 Selenium 处理动态 webtable 需要先加载网页,然后定位表格、行和列,并获取其中的数据。当表格数据发生变化时,我们需要重新定位行和列,并重新获取数据。通过以上方法,我们可以很方便地处理动态 webtable。