用C#读取隐藏的网站文本框?

时间:2014-03-04 01:20:58

标签: c# javascript web

首先,我几乎还是初学者,特别是涉及网络内容时。

我正在尝试从使用winforms应用程序的浏览器中打开的网页中读取文本框的内容,但我无法修改网页本身的源代码。可悲的是,我正在寻找的字符串不是简单地写在页面的源代码中。所以我不能只是阅读页面源并解析它。好像文本框的内容是通过javascript填充的。

我一般来说不知道从哪里开始。任何建议都非常受欢迎。

另外,我不确定我应该在这里提供什么其他信息。我不知道从哪里开始,所以我还没有任何代码要显示。

编辑:

我一直在尝试使用敏捷包,但我仍然不确定如何获得我需要的东西。到目前为止,这是我的代码:

WebClient client = new WebClient();
String html = client.DownloadString(URL);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//div[@class='ember-view']"))
{
    HtmlAttribute div = link.Attributes["div"];
    if (div != null)
    {
                outputBox.Text += div.Value;
    }
}

当我运行代码时,我明白了:

发生了类型为“System.NullReferenceException”的未处理异常。 附加信息:对象引用未设置为对象的实例。

当我进入网页并进行Inspect Element时,我得到了这个(我只复制了几行):

<html class="no-js" lang="en">

<head></head>
<body class="ember-application" lang="en-US" data-environment="production">
    <div id="booting" style="display: none;"></div>
    <div id="ember2493" class="ember-view">
        <div id="alert" class="ember-view"></div>

我不知道怎么去,比方说,这行的内部代码:

<div id="alert" class="ember-view"></div>

此外,如果这是我遗漏的明显事实,我表示歉意,但同样,这对我来说都是新的。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你知道Html Agility Pack吗?我总是使用敏捷包进行HTML爬行。

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");

答案 1 :(得分:0)

或许以下几点可能会有所帮助?

        var inputs = webBrowser1.Document.GetElementsByTagName("input");
        foreach (HtmlElement input in inputs)
        {
            var id = input.Id;
            var name = input.Name;
            var val = input.OuterHtml;  // can parse value from here
        }