Ich versuche, den HTML-Code einer Webseite herunterladen und analysieren. Vor kurzem zog die Quelle Webseite aus allen ihren Informationen auf einer Seite mit Teil davon hinter Javascript versteckt. Es gibt ein „Show All“ Kontrollkästchen, um die gesamte Seite zu sehen aktiviert werden muss.
Hier ist die Website: Source Website
Ich bin auf der Suche zu automatisieren die Seite abzurufen, nachdem das Kontrollkästchen angeklickt wurde im Wesentlichen. Derzeit haben wir ein C-Programm, das die Webseite herunterlädt und unsere Analyse behandelt. Ich bin mir nicht sicher, ob es Sie Javascript in der URL akzeptieren kann, wenn die verwendet werden können, um dieses Problem zu lösen (Ich habe ein Bookmarklet versucht, mit JavaScript aus der URL zu nennen, aber ich war nicht in der Lage, es zu bekommen das zu handhaben Kontrollkästchen), aber es kann Dateien verarbeiten, wenn es einfacher ist, ein C # Programm zu schreiben, die damit umgehen können.
Ich würde einen Weg vorziehen, diese selbst zu codieren, anstatt ein Drittes Programm zu verwenden, um alles zu vermeiden, was auf dem Server installieren diese laufen. Jede Hilfe wird sehr geschätzt.
Edit: Im Grunde genommen, wie kann ich den Aufruf der Javascript automatisieren , die auf die „Select All“ Checkbox verknüpft ist , damit ich die HTML - Seite enthält alles greifen kann , dass nach dem Klicken auf das Kontrollkästchen angezeigt wird .
Bearbeiten 2: Hier ist die Ausgabe von Fiddler2:
__EVENTTARGET ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox
__EVENTARGUMENT
__LASTFOCUS
__VIEWSTATE (REMOVED DUE TO LENGTH)
__EVENTVALIDATION (REMOVED DUE TO LENGTH)
ctl00$ContentPlaceHolder1$GenericWebUserControl$Organization0 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Initial or Amendment1 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Relief Requested2 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Country3 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Status4 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$StartDate5
ctl00$ContentPlaceHolder1$GenericWebUserControl$EndDate5
ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox on
Ich bin immer noch 500 Fehler vom Server. Muss ich alle diese GenericWebUserControls in der Post-Anforderung auch enthalten? Auch brauche ich die Eventvalidation aufzunehmen?
EDIT 3: Hier ist der neueste Code. Ich bin immer noch Server 500 Fehler.
private void CreateRequest()
{
HttpWebRequest httpWebRequest;
HttpWebResponse httpWebResponse;
StreamWriter streamWriter;
Stream webResponseStream;
StreamReader streamReader;
string postData;
string outputHTML;
postData = String.Format(&__EVENTTARGET={0} + &__VIEWSTATE={1} + &__EVENTVALIDATION=(2)+&ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox=on +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Organization0=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Initial+or+Amendment1=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Relief+Requested2=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Country3=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Status4=ALL,EVENTTARGET, VIEWSTATE, EVENTVALIDATION);
httpWebRequest = (HttpWebRequest)WebRequest.Create(http://services.cftc.gov/sirt/sirt.aspx?Topic=ForeignPart30Exemptions);
httpWebRequest.Method = POST;
httpWebRequest.ContentType = application/x-www-form-urlencoded;
httpWebRequest.ContentLength = postData.Length;
streamWriter = new StreamWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.ASCII);
streamWriter.Write(postData);
streamWriter.Close();
httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
webResponseStream = httpWebResponse.GetResponseStream();
streamReader = new StreamReader(webResponseStream);
outputHTML = streamReader.ReadToEnd();
Console.WriteLine(outputHTML);
}
EDIT 4: Ich habe festgestellt , dass es die Zeichenfolge postdata ist, der den Server 500 Fehler verursacht. Wenn ich es eine leere Zeichenfolge zu machen, gibt es die gesamte Webseite. Weiß jemand, ob ich richtig bin mit alles setzen , die von Fiddler2 kam , die einen Wert in die postdata String hatte? Auch ist , dass __VIEWSTATE eine unglaublich lange Zeichenfolge. Gibt es Grenzen oder alles , was ich bin nicht sicher?
EDIT 5: lief ich alle Saiten in postdata über einen URL - Encoder verwendet, aber ich bin immer noch Server 500 Fehler bekommen. Gibt es eine Möglichkeit für mich zu debuggen , warum das Post Körper ungültig ist?
LÖSUNG: Ok, ich konnte nicht meine postdata Zeichenfolge richtig, aber wenn ich in der rohen POST Körper klebte es funktioniert. Das sieht aus wie es gut genug sein wird, aber meine Sorge ist , wenn diese Arbeits wird fortgesetzt.













