<link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=6549724036207680656&amp;zx=de779642-2f7e-4395-a5a7-135811de2179' rel='stylesheet'/>

2015年6月6日土曜日

C#でIEを自動制御しよう (9) LINQでリンクを取得してクリックして開く

■LINQでリンクを取得してクリックして開く

最初に。このサンプルコードだけLINQを使っています。using System.Linq;を忘れずに。

getElementsByTagName("A")で、Aタグをさらった後、Whereで目的とするAタグだけを取得しています。あとは、クリックするだけ。

サンプルコード

public void OpenLink()
{
var IE = new SHDocVw.InternetExplorer();
IE.Visible = true;
object URL = "http://www.google.com/";
IE.Navigate2(ref URL);
IE.Wait();
var doc = IE.Document as mshtml.IHTMLDocument3;
doc.getElementById("lst-ib").innerText = "ぐるぐる";
IE.Wait();
doc.getElementsByName("btnK").item(index: 0).click();
IE.Wait(1000);
//googleの検索結果ページは、一旦空のページを表示後、動的に検索結果が追加される仕様のため、
//検索結果の追加が終わるまでの間を1秒として、待機するように
var anchor = doc.getElementsByTagName("A").Cast<mshtml.IHTMLElement>()
.Where(x => x.innerText != null // innerTextがnullの場合があるので注意
&& x.innerText.Contains("Wikipedia"))
.First();
anchor.click();
}
view raw test.cs hosted with ❤ by GitHub

補足説明

注意点は、今回の場合、getElementsByTagName("A")で拾ってきた要素の中には、innerTextがnullの要素が含まれている可能性がある点でしょうか。具体的には、画像にリンクが貼られている場合ですかね。