如何在VB.NET中用webbrowser控件按宽度获取网页表格指定列文本
方案可行性结论
该方案是可行的。你可以通过匹配<td>元素的宽度属性/样式值,定位到目标列后提取文本。
页面结构参考

实现思路
- 等待WebBrowser控件完全加载目标网页,避免DOM元素未渲染导致获取失败
- 定位到id为
row_resultsTable_4的目标表格元素 - 遍历该表格下所有元素,匹配宽度为200px的元素
- 提取匹配成功的元素的InnerText属性得到目标列文本
完整代码示例
下面的代码适配VB.NET新手,附带详细注释,直接放到对应事件中即可运行:
' 请将该代码放在WebBrowser控件的DocumentCompleted事件中,确保页面加载完成后执行 Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted ' 过滤多次触发的情况,仅在目标页面完全加载后执行逻辑 If e.Url <> WebBrowser1.Url Then Exit Sub If WebBrowser1.Document Is Nothing Then Exit Sub ' 1. 定位id为row_resultsTable_4的目标表格 Dim targetTable As HtmlElement = WebBrowser1.Document.GetElementById("row_resultsTable_4") If targetTable Is Nothing Then MessageBox.Show("未找到目标表格,请检查表格ID是否正确") Exit Sub End If ' 2. 遍历表格下所有td元素,匹配宽度为200px的列 Dim targetColTexts As New List(Of String) For Each td As HtmlElement In targetTable.GetElementsByTagName("td") ' 兼容两种宽度定义方式:直接写width属性、在style中定义宽度 Dim widthAttr As String = td.GetAttribute("width").Trim().ToLower() Dim styleAttr As String = td.GetAttribute("style").Trim().ToLower() ' 匹配200px宽度的td元素,兜底判断取浏览器渲染后的实际像素宽度 If (widthAttr = "200" OrElse widthAttr = "200px") _ OrElse styleAttr.Contains("width:200px") _ OrElse styleAttr.Contains("width: 200px") _ OrElse td.OffsetRectangle.Width = 200 Then ' 3. 提取文本并过滤空值 Dim colText As String = td.InnerText.Trim If Not String.IsNullOrEmpty(colText) Then targetColTexts.Add(colText) End If End If Next ' 测试输出:可根据需求修改为写入文本框、存入文件等操作 If targetColTexts.Count > 0 Then MessageBox.Show("提取到的目标列内容:" & vbCrLf & String.Join(vbCrLf, targetColTexts)) Else MessageBox.Show("未找到宽度为200px的目标列") End If End Sub
补充使用说明
- 需要触发页面加载时,可在按钮点击或窗体加载事件中添加代码:
WebBrowser1.Navigate("替换为你的目标网页地址") - 如果需要保留列内容的HTML格式,可将
td.InnerText替换为td.InnerHtml - 如果目标列宽度存在1-2px的渲染误差,可将
td.OffsetRectangle.Width = 200调整为范围判断,比如td.OffsetRectangle.Width >= 198 AndAlso td.OffsetRectangle.Width <= 202
内容的提问来源于stack exchange,提问作者Daniel André
相关产品推荐
相关产品推荐

