私のアプリケーションには、URLに特定の文字列でInternet Explorerのタブが開いているかどうかをチェックする機能があり、特定の要素のinnerText値をそのページ。C#で公開されているIEタブからデータをスクレイピングする
次のコードは、アプリケーションの別の部分で動作するコードに基づいており、データはiFrame内の要素に含まれていますが、問題の機能には該当しません。このコードは 'オブジェクトのインスタンスに設定されていないオブジェクト参照'をスローします。おそらく要素を見つけることができないため、要求された要素のinnerText値を表示しようとすると例外です。
SHDocVw.ShellWindows shellWindows = new ShellWindows();
foreach (SHDocVw.WebBrowser ie in shellWindows)
{
if (ie.LocationURL.ToString().IndexOf("MyPage.aspx") != -1)
{
mshtml.HTMLDocument currentTab = ie.Document as mshtml.HTMLDocument;
//The below line throws an 'Object reference not set to an instance of an object.' exception.
MessageBox.Show(currentTab.getElementById("lblFoo").innerText.ToString());
break;
}
}
私は間違っていますか?また、私はウェブスクレイピングに慣れていないので、これはこれについての最も最新の方法ではないかもしれないことは承知しています。私はHtmlAgilityPackについて知っていますが、開いているIEタブで特定のURLを検索した後で、要素を検索してその値を抽出する方法の例を見つけることができませんでした。
おそらく、currentTab.getElementById( "lblFoo")はオブジェクトを返さないためです。最初に存在を確認します。 – Quintium
お返事ありがとうございます。 "lblFoo"は、ターゲットのタブのソースHTMLにはっきりと存在します。 –