我可以通过WebClient读取iframe(我想要外部的html)吗?

时间:2013-01-20 20:38:34

标签: c# browser html-parsing webclient

我的程序正在读取一个网络目标,在正文的某个地方有我想要阅读的iframe。

我的html来源

<html>
...
<iframe src="http://www.mysite.com" ></iframe>
...
</html>

在我的程序中,我有一个方法将源返回为字符串

public static string get_url_source(string url)
{
   using (WebClient client = new WebClient())
   {
       return client.DownloadString(url);
   }
}

我的问题是,我想在读取源代码时获取iframe的源代码,就像在正常浏览中一样。

我是否可以仅使用WebBrowser Class执行此操作,还是可以在WebClient或其他类中执行此操作?

真正的问题: 如何获得给出URL的外部html?欢迎任何搭建。

3 个答案:

答案 0 :(得分:3)

获取网站来源后,您可以使用HtmlAgilityPack获取iframe的网址

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var src = doc.DocumentNode.SelectSingleNode("//iframe")
            .Attributes["src"].Value;

然后再次拨打get_url_source

答案 1 :(得分:2)

使用HTML Agility Pack解析您的来源,然后:

List<String> iframeSource = new List<String>();

HtmlDocument doc = new HtmlDocument();
doc.Load(url);

foreach (HtmlNode node in doc.DocumentElement.SelectNodes("//iframe"))
    iframeSource.Add(get_url_source(mainiFrame.Attributes["src"]));

如果您要定位单个iframe,请尝试使用ID属性或其他内容识别它,以便您只能检索一个来源:

String iframeSource;

HtmlDocument doc = new HtmlDocument();
doc.Load(url);

foreach (HtmlNode node in doc.DocumentElement.SelectNodes("//iframe"))
{
    // Just an example for check, but you could use different approaches...
    if (node.Attributes["id"].Value == 'targetframe')
        iframeSource = get_url_source(node.Attributes["src"].Value);
}

答案 2 :(得分:0)

我在搜索后找到了答案,这就是我想要的

webBrowser1.Url = new Uri("http://www.mysite.com/");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
string InnerSource = webBrowser1.Document.Body.InnerHtml; 
                            //You can use here OuterHtml too.