首先,我几乎还是初学者,特别是涉及网络内容时。
我正在尝试从使用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>
此外,如果这是我遗漏的明显事实,我表示歉意,但同样,这对我来说都是新的。感谢您的帮助。
答案 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
}