如何按顺序打印表格元素?Selenium代码调试求助
问题修正:Selenium表格顺序打印与调试日志过多
一、问题分析
- 调试日志泛滥:Selenium依赖的AsyncHttpClient等组件默认输出DEBUG级日志,导致控制台被大量调试信息占据。
- 表格打印逻辑错误:原代码重复打印表头和所有单元格,未按照表格的行顺序逐行打印元素。
二、解决方案
1. 关闭调试日志
通过添加系统属性,将日志级别调整为INFO或更高,抑制DEBUG日志输出。
2. 修正表格遍历逻辑
正确的遍历方式是:
- 先定位到目标表格(避免页面有多个表格时出错)
- 获取表格的所有行(
<tr>元素) - 遍历每一行,获取该行内的所有单元格(表头行取
<th>,数据行取<td>) - 逐行打印每个单元格的文本
三、修正后的完整代码
import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import io.github.bonigarcia.wdm.WebDriverManager; public class Softwaretestingo { public static void main(String[] args) throws Exception { // 抑制Selenium调试日志 System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "info"); System.setProperty("io.netty.util.internal.logging.InternalLoggerFactory", "slf4j"); System.setProperty("org.asynchttpclient.loggerLevel", "info"); // 初始化浏览器 WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.get("https://softwaretestingo.blogspot.com/2020/09/static-table.html"); // 定位目标表格(避免页面多表格干扰) WebElement targetTable = driver.findElement(By.xpath("//table")); // 获取表格所有行 List<WebElement> rows = targetTable.findElements(By.tagName("tr")); // 逐行遍历打印 for(WebElement row : rows) { // 获取当前行的所有单元格(包含表头th和数据td) List<WebElement> cells = row.findElements(By.xpath(".//th|.//td")); // 打印当前行的所有单元格文本,用制表符分隔 for(WebElement cell : cells) { System.out.print(cell.getText() + "\t"); } // 每行结束换行 System.out.println(); } // 关闭浏览器,释放资源 driver.quit(); } }
四、代码说明
- 日志抑制:通过设置系统属性,将相关组件的日志级别设为INFO,彻底屏蔽DEBUG级别的调试信息。
- 精准定位:先定位单个表格元素,再在该元素范围内查找行和单元格,避免页面存在多个表格时的错误匹配。
- 顺序遍历:遍历每一行,再遍历该行内的所有单元格,保证输出顺序与表格实际展示顺序完全一致。
- 格式优化:用制表符分隔单元格文本,输出结构更接近原表格,可读性更强。
- 资源清理:添加
driver.quit()关闭浏览器,避免残留进程占用资源。
内容的提问来源于stack exchange,提问作者Sanjay Mardi
相关产品推荐
相关产品推荐

