Holen Sie HTML-von Rahmen mithilfe von WebBrowser-Steuerelement - unauthorizedaccessexception
Ich bin auf der Suche nach einem kostenlosen tool oder dlls, die ich verwenden können, zu schreiben, meine eigenen code in .NET-Prozess einige web-Anfragen.
Sagen wir, ich habe eine URL mit einigen query-string-Parameter ähnlich http://www.example.com?param=1 und wenn ich es in einem browser mehrere Umleitungen auftreten, und schließlich HTML gerendert wird, dass ein frameset ein frame-innere html, enthält eine Tabelle mit Daten, die ich brauche. Ich möchte speichern Sie diese Daten in die externe Datei in einem CSV-format. Offensichtlich werden die Daten unterscheiden sich je nach der querystring-parameter param. Sagen wir, ich möchte die Anwendung ausführen und generieren Sie 1000 CSV-Dateien für die param-Werte von 1 bis 1000.
Habe ich gute Kenntnisse in .NET, javascript, HTML, aber das Hauptproblem ist, wie die endgültige HTML-server-code.
Was ich versucht habe ist, ich habe eine neue Form-Anwendung Hinzugefügt, die ein webbrowser-Steuerelement und verwendet code wie folgt:
private void FormMain_Shown(object sender, EventArgs e)
{
var param = 1; //test
var url = string.Format(Constants.URL_PATTERN, param);
WebBrowserMain.Navigated += WebBrowserMain_Navigated;
WebBrowserMain.Navigate(url);
}
void WebBrowserMain_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
if (e.Url.OriginalString == Constants.FINAL_URL)
{
var document = WebBrowserMain.Document.Window.Frames[0].Document;
}
}
Aber leider habe ich receieve unauthorizedaccessexception da wohl Rahmen und das Dokument in verschiedenen Domänen. Hat jemand eine Idee, wie dies zu umgehen und vielleicht eine andere Marke neuen Ansatz zur Implementierung von Funktionen wie diese?
- Es ist nicht klar, werden Sie versuchen, führen Sie diese Winforms-app auf der server-Seite?
- Ich habe keinen Zugriff auf die server, das ist der winforms-app, die ich gebaut haben, und rufen Sie aus clientseitiger, der versucht, navigieren Sie zu dem externen server, indem Sie die URL zu den HTML-ich habe keine Kontrolle zu. Dann brauche ich zur Verarbeitung des HTML, um die notwendigen Daten zur Tabelle.
- Versuchen handling
DocumentCompleted
stattNavigated
. Besser noch, Sie sind nach dem DOM -window.onload
event der top-Seite. Überprüfen Sie diese für weitere Informationen: stackoverflow.com/a/19283143/1768303 - DocumentCompleted, macht keinen Unterschied - unauthorizedaccessexception. Ich bin nicht in der Lage, Zugriff auf den html-Code, der im inneren des RAHMENS.
- Wenn Sie sicher sind, dass die URL der innere Rahmen ist aus einer anderen Domäne, hier ist, wie Sie bekommen können, um den Rahmen, es ist schwierig: stackoverflow.com/q/3508317/1768303
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dank der Noseratio Kommentare ist mir gelungen, mit dem WebBrowser-Steuerelement. Hier sind einige wichtige Punkte, die vielleicht helfen anderen, die ähnliche Fragen:
1) DocumentCompleted-Ereignis verwendet werden soll. Für Navigated-Ereignis body des Dokuments ist NULL.
2) Folgende Antwort hat mir sehr geholfen: WebBrowserControl: UnauthorizedAccessException beim Zugriff auf die Eigenschaft eines Frames
3) war ich mir nicht bewusst über IHTMLWindow2 ähnliche Schnittstellen für Sie, um korrekt zu arbeiten, fügte ich Verweise auf folgenden COM-libs: Microsoft Internet Controls (SHDocVw), Microsoft HTML Object Library (MSHTML).
4) ich schnappte mir den html-Code der frame mit dem folgenden code:
5) Für die Arbeit mit Html, habe ich die feinen HTML-Agility-Pack, dass hat einige ziemlich gute XPath-Suche.