C#应用Selenium学习:读取网页表格
Web网页表格的结构一般为:
table标签:表示表格元素;
tbody标签:表示表格主体;
tr标签:表示表格的一行;
td标签:表示表格的一列。
依据此,可以实现表格解析代码如下:
/// <summary> /// 解析指定页面中的表格数据,返回的DataTable的类型是element类型 /// </summary> /// <param name="driver"></param> /// <returns></returns> public List<List<IWebElement>> GetTable(ChromeDriver driver,string url) { //设置隐式等待指定元素,等待时长为20秒 driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20); driver.Url = url; //web页面表格的结构:table(表格)、tbody(表格主体)、tr(表格一行)、td(表格一列) var table=driver.FindElementByTagName("table"); //如果没有找到,或者多于一个,则暂时先不处理 if ((table is IWebElement) == false) throw new Exception("Ex202102121134:不支持"); var tbody=table.FindElement(By.TagName("tbody")); List<List<IWebElement>> res = new List<List<IWebElement>>(); //处理每一行 foreach (var tr in tbody.FindElements(By.TagName("tr"))) { List<IWebElement> row = new List<IWebElement>(); //处理每一列 foreach (var td in tr.FindElements(By.TagName("td"))) { row.Add(td); } res.Add(row); } return res; }
如果需要把表格每一个单元格的内容提取出来,可以参考如下代码:
/// <summary> /// 返回表格的内容 /// </summary> /// <param name="driver"></param> /// <param name="url"></param> /// <returns></returns> public List<List<string>> GetTableText(ChromeDriver driver,string url) { var elments=this.GetTable(driver, url); List<List<string>> res = new List<List<string>>(); foreach (var row in elments) { List<string> newRow = new List<string>(); foreach (var item in row) { newRow.Add(item.Text); } res.Add(newRow); } return res; }