【问题标题】:Webbrowser table innertext numaric data how show in textbox?Web 浏览器表格内文数字数据如何显示在文本框中?
【发布时间】:2015-12-04 02:52:21
【问题描述】:

我在下面发布了我的 HTML。我想从我的文本框区域中获取 Number 值。我已经尝试了几个过程,但仍然没有得到任何有效的解决方案。请检查我的 HTML 和代码 sn-p,并告诉我一个可能的解决方案。

刷新页面时,数字前缀将始终保持不变。但是,“数字”区域中的最后一个数字会改变,但始终包含“206”作为前 3 位数字。下面是我的表格示例。

<table align="center" width="500" border="0">
<tr><td align="center" height="30" style="font-size:medium">See your job Details, adriankdins2f3dd@hotmail.com.</td></tr>
<tr><td align="center" style="color:#CC3300"><b>Your Job Information   is:</b></td></tr>
<tr><td align="center">
<table>
<tr><td><b>Phone Number:</b> 206-600-9159</td></tr>
<tr><td><b>Your AGe:</b> 25</td></tr>
<tr><td><b>Email:</b> adriankdins2f3dd@hotmail.com</td></tr>
<tr><td><b>Job Title</b> cleaner </td></tr>
</table>
</td>
</tr>
<tr><td align="center" valign="middle" height="25">Jobinstruction</td>   
</tr>
<tr><td>
</td></tr>
<tr><td
</td></tr> 
</table>

如下所示,我正在使用列表框尝试此过程,但我没有收到任何内容。

Regex re = new Regex(@"(?<=<tr><td><b>Phone\s Number:\s?</b>\s?)[206]\s.+?(?=</td></tr>)", RegexOptions.Singleline);
        foreach (Match match in re.Matches(webBrowser1.DocumentText))
        {
            listBox1.Items.Add(match.Value);
        }

如果有人能告诉我如何在我的列表框中接收浏览器窗口中的所有内容(“206”+数字),我将不胜感激。另外,如果您能详细地解释答案并使用好的 cmets,我将不胜感激,因为我也想更详细地理解答案。

【问题讨论】:

  • 你需要提取什么文本? 206-425-2541? &lt;table&gt; 是文档中的第一个表吗?
  • 是的,我只想在我的文本框或列表框中输入这个数字
  • 好的,请看我的回答。
  • 没有先生 再次可用
  • 我再次更新了我的代码,请检查

标签: regex split innerhtml regex-greedy htmlelements


【解决方案1】:

您可以使用 HtmlAgilityPack 和 XPath 查询来做到这一点:

using HtmlAgilityPack;
...

HtmlDocument html = new HtmlDocument();
html.LoadHtml(htmlText);
HtmlNode doc = html.DocumentNode;

HtmlNode node = doc.SelectSingleNode("//table/tr/td/b[starts-with(.,'Phone Number:')]/following::text()[1]");

if (node != null)
{
    Console.WriteLine(node.OuterHtml);
}

【讨论】:

  • 我在 c# 中使用 windows 应用程序意味着浏览器应用程序
  • 我再次更新了我的代码,请检查我正在使用 Windows 应用程序表单,所以需要 Windows 应用程序代码。
【解决方案2】:

您不需要使用任何外部库,因为您使用的是 WebBrowser 组件。您需要访问正确的表(在大多数情况下,该表具有唯一的 id,或者您可以通过其在使用GetElementsByTagName 获得的结果数组中的索引来访问它)。

您可以遍历所有表格、行和单元格并检查InnerText 是否以Phone Number: 开头,然后获取您需要的值。

webBrowser1.Navigate(@"C:\tmp2.html");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
    Application.DoEvents();
HtmlElementCollection bColl = webBrowser1.Document.GetElementsByTagName("td");
var TelNum = string.Empty;
var PersonName = string.Empty;
if (bColl != null && bColl.Count > 0)
{
    foreach (HtmlElement td in bColl)
    {
        if (!String.IsNullOrEmpty(td.InnerText) && td.InnerText.StartsWith("Phone Number:"))
            TelNum = td.InnerText.Substring(14).Trim();
        if (!String.IsNullOrEmpty(td.InnerText) && td.InnerText.StartsWith("Your Name is "))
            PersonName = td.InnerText.Substring(13).Trim();
    }
}

我使用Trim() 以防有人在那里留下多余的空间。

【讨论】:

  • 我想在我的文本框中显示数字,你的代码也尝试相同,包括文本框,但不显示任何内容,找不到电话号码显示错误。
  • 我相信你的想法 100% 不错,但我需要再次帮助我为什么没有得到任何东西!!!
  • 请分享整个 HTML 文件,并说明你不能用它做什么。
  • 我也更新了我的答案,现在,我只是循环遍历td 元素。
猜你喜欢
  • 2020-06-18
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
相关资源
最近更新 更多