2016-08-26 3 views
0

私は私がやった完成イベントでWebBrowserを使用してWebサイトに移動しています:どのように文字列をループし、jpgで終わるhref間のリンクを取得できますか?

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      mshtml.HTMLDocument objHtmlDoc = (mshtml.HTMLDocument)webBrowser1.Document.DomDocument; 
      string pageSource = objHtmlDoc.documentElement.innerHTML; 
     } 

今私は、全体のページのソースを持ってpageSourceに。 私は

string[] lines = File.ReadAllLines(pageSource); 

を作ってみました。しかし、それは私に例外与える:その後、私はこの行を試みたパス

無効な文字を:

var aContents = Regex.Matches(pageSource, @"<a [^>]*>(.*?)</a>").Cast<Match>().Select(m => m.Groups[1].Value); 

しかし、私全くのhref行が存在しませんaContents内

+1

'pageSource'変数は、HTMLコンテンツではなく、ファイルパスの文字列は'のでパスexception'で不正な文字があります。 – mbrdev

+1

あなたはすでにHTML DOMを完全に解析し、代わりにHTMLをテキストとして取り込み、それに正規表現を適用しようと面白いです... –

答えて

3

使用htmlagilitypack http://html-agility-pack.net

あなたはurlからロードするためにライブラリメソッドを使うことができます - そして、ノードがextを含んでいるかどうかをチェックし、それをコレクションに格納します。

List<string> alljpgHref = new List<string>; 
HtmlWeb hw = new HtmlWeb(); 
HtmlDocument doc = hw.Load(/* url */); 
foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) 
{ 
     string hrefValue = link.GetAttributeValue("href", string.Empty); 
     if (hrefValue.contains(".jpg")) alljpgHref.add(hrefValue); 

} 
1

か、単にリンクを照会:

string[] hrefs = this.webBrowser1.Document.Links.Cast<HtmlElement>() 
      .Select(a => a.GetAttribute("href")).Where(h => h.Contains(".jpg")).ToArray(); 
関連する問題