2017-06-14 2 views
1

Meine Anwendung verfügt über eine Funktion, die überprüft werden soll, ob eine Internet Explorer-Registerkarte mit einer bestimmten Zeichenfolge in der URL geöffnet ist, und, falls gefunden, die inneren Textwerte von bestimmten Elementen abkratzen diese Seite.Scrapping von Daten aus einem geöffneten IE-Tab mit C#

Der folgende Code basiert auf Code, der für einen anderen Teil meiner Anwendung funktioniert, wobei die Daten in Elementen enthalten sind, die in einem iFrame enthalten sind. Dies ist jedoch nicht der Fall in dem Feature (d. H. Kein iFrame beteiligt). Dieser Code löst einen 'Objektreferenz nicht auf eine Instanz eines Objekts festgelegt' aus. Ausnahme beim Versuch, den InnerText-Wert des angeforderten Elements anzuzeigen, vermutlich weil das Element nicht gefunden werden kann.

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; 
} 
} 

Was mache ich falsch? Außerdem bin ich neu im Web-Scraping, also bin ich mir bewusst, dass dies nicht die aktuellste Art und Weise ist, dies zu tun. Ich kenne HtmlAgilityPack, aber ich konnte keine Beispiele dafür finden, wie man nach Elementen sucht (und deren Werte extrahiert), nachdem ich in den offenen IE-Tabs nach einer bestimmten URL gesucht habe.

+0

Wahrscheinlich, weil currentTab.getElementById ("lblFoo") kein Objekt zurückgibt. Zuerst auf Vorhandensein prüfen. – Quintium

+0

Danke für Ihre Antwort. "lblFoo" ist definitiv in der HTML-Quelldatei der Registerkarte vorhanden, auf die ich abziele. –

Antwort

0

Diese Links helfen Ihnen, Internet Explorer auf verschiedene Arten zu automatisieren. Link1 Link2Link3

Verwandte Themen