导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

C#关于获取网页Activex控件中的代码

迷路的指南针 南昌航空大学 2013-04-21 03:21:42
小菜最近想做一个页面解析的软件,但是我发现有的网页中如果夹杂了Activex控件的话,这部分的内容就无法获得。用的C#的代码:先用做了一个WebBrowser浏览器,当跳到了想要解析的浏览器时,点击解析,然后获得浏览器里面的源代码,这样就解决了需要Ssesion验证的问题,可以获得需要用户登录后的界面的信息,但是现在,小菜发现获得的源代码里面没有Activex控件中的内容,小菜就是想获得。现在求教。代码如下
private void Analyze_Click(object sender, EventArgs e)
{
#region 获得网页的html
string html = "";
try
{

/*string url = WebBrowser.Url.ToString();
System.Net.WebClient aWebClient = new System.Net.WebClient();
aWebClient.Encoding = System.Text.Encoding.Default;
html = aWebClient.DownloadString("file:///E:/学习/大三课程/Test.htm");*/
StreamReader sr = new StreamReader(WebBrowser.DocumentStream, Encoding.Default);
html = sr.ReadToEnd();
//html = WebBrowser.DocumentText;
FileInfo fi = new FileInfo("E:\\test.txt");
FileStream fs;
if (fi.Exists)
{
fs = fi.Open(FileMode.CreateNew);
}
else
{
fs = fi.Create();
}
StreamWriter bw = new StreamWriter(fs);
bw.Write(html);
bw.WriteLine("测试");
bw.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
#endregion
#region 分析网页html节点
//Lexer词法分析器直接解析HTML,Lexer中真正执行词法分析的是NextCode()方法
Lexer lexer = new Lexer(html);
//解析
Parser parser = new Parser(lexer);
//获取我们想要的节点,类似于NodeList nodes = parser.parse(new MyNodeFilter(new String[]{"INPUT","FONT"}));获取INPUT和FONT节点
//NodeList htmlNodes = parser.Parse(null);
NodeList htmlNodes = parser.Parse(new TagNameFilter("TABLE"));
this.treeView1.Nodes.Clear();
this.treeView1.Nodes.Add("root");
TreeNode treeRoot = this.treeView1.Nodes[0];
for (int i = 0; i < htmlNodes.Count; i++)
{
//获取所有的节点
this.RecursionHtmlNode(treeRoot, htmlNodes[i], false);
}
#endregion

}
private void RecursionHtmlNode(TreeNode treeNode, INode htmlNode, bool siblingRequired)
{
//如果节点不为空
if (htmlNode == null || treeNode == null) return;
TreeNode current = treeNode;
TreeNode content ;
//标签
if (htmlNode is ITag)
{
ITag tag = (htmlNode as ITag);
//if (!tag.IsEndTag())
//{
string nodeString = tag.TagName;
if (tag.Attributes != null && tag.Attributes.Count > 0)
{
if (tag.Attributes["ID"] != null)
{
nodeString = nodeString + " { id=\"" + tag.Attributes["ID"].ToString() + "\" }";
}
if (tag.Attributes["HREF"] != null)
{
nodeString = nodeString + " { href=\"" + tag.Attributes["HREF"].ToString() + "\" }";
}
if (tag.Attributes["TD"] != null)
{
nodeString = nodeString + " { td = \""+tag.Attributes["TD"].ToString()+"\" }";
}
}

current = new TreeNode(nodeString);
treeNode.Nodes.Add(current);
//}
}
//获取节点间的内容
if (htmlNode.Children != null && htmlNode.Children.Count > 0)
{
this.RecursionHtmlNode(current, htmlNode.FirstChild, true);
content = new TreeNode(htmlNode.FirstChild.GetText());
treeNode.Nodes.Add(content);
}
//the sibling nodes
if (siblingRequired)
{
INode sibling = htmlNode.NextSibling;
while (sibling != null)
{
this.RecursionHtmlNode(treeNode, sibling, false);
sibling = sibling.NextSibling;
}
}
}
实际的运行情况如下:
网页的原样:
...全文
65 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
没有办法。 为了防止被人抓取,我们就可以使用flash或者silverlight编写网页上的具有价值的动态内容。
回复
就是个人的课本那块解析不到,那块是用的Activex控件编写的。问有没有方法能获得位于Activex中的信息。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.