Je suis en train de télécharger et d'analyser le code HTML d'une page Web. Récemment, le site source déplacé d'avoir toutes leurs informations sur une page pour cacher une partie de derrière javascript. Il y a une case à cocher « Afficher tous » qui doit être activé pour afficher la page.
Voici le site: Site Web Source
Essentiellement, je suis à la recherche d'automatiser la récupération après cette page la case à cocher a été cliqué. À l'heure actuelle, nous avons un programme C qui télécharge la page Web et gère notre analyse. Je ne sais pas si elle peut accepter javascript dans l'URL si cela peut être utilisé pour résoudre ce problème (je l'ai essayé d'utiliser un bookmarklet pour appeler le javascript de l'URL, mais je n'ai pas pu l'obtenir pour gérer la cocher la case), mais il peut gérer des fichiers s'il est plus facile d'écrire un programme C # qui peut gérer cela.
Je préférerais un moyen de coder moi-même plutôt que d'utiliser un programme tiers pour éviter d'avoir à installer quoi que ce soit sur le serveur fonctionne sur ce. Toute aide est grandement appréciée.
Edit: En gros, comment puis - je automatiser l'appel au javascript qui est lié à cette « Sélectionner tout » case à cocher pour que je puisse saisir la page html contenant tout est il est affiché après avoir cliqué sur la case à cocher.
Edit 2: Voici la sortie de 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
Je reçois actuellement 500 ERREURS du serveur. Ai-je besoin d'inclure tous ces GenericWebUserControls dans la demande de poste ainsi? Aussi je ne dois inclure la EVENTVALIDATION?
EDIT 3: Voici le dernier code. Je reçois encore serveur 500 erreurs.
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: J'ai déterminé que c'est la chaîne postData qui cause l'erreur serveur 500. Si je fais une chaîne vide, il affiche la page web entière. Est -ce que quelqu'un sait si je ne me trompe pas en avoir à mettre tout ce qui venait de Fiddler2 qui avait une valeur dans la chaîne postData? En outre, que __VIEWSTATE est une chaîne très longue. Y at - il des limites ou tout ce que je ne suis pas sûr?
EDIT 5: J'ai couru toutes les chaînes utilisées dans postData par un codeur URL, mais je reçois toujours le serveur 500 erreurs. Est - il possible pour moi de déboguer pourquoi ce corps de poste est invalide?
SOLUTION: Ok, je ne pouvais pas obtenir ma chaîne de postData correcte, mais quand je collais dans le corps brut POST il fonctionne. Cela ressemble à ce sera assez bon, mais mon souci est de savoir si cela va continuer à travailler.













