Am încercat să descărcați și analiza HTML al unei pagini web. Recent, site-ul sursa sa mutat de a avea toate informațiile lor pe o singură pagină pentru a ascunde o parte din ea în spatele JavaScript. Există o „Arată tot“ caseta de selectare care are nevoie activat pentru a putea vizualiza întreaga pagină.
Iată site - ul: Source site -
În esență, eu sunt în căutarea de a automatiza recuperarea după pagina caseta de selectare a fost făcut clic. În prezent, avem un program C, care descarcă pagina web și se ocupă de parsare noastre. Nu sunt sigur dacă acesta poate accepta JavaScript în URL-ul în cazul în care poate fi utilizată pentru a rezolva această problemă (am încercat, folosind un bookmarklet pentru a apela javascript din URL-ul, dar nu am fost în stare să-l să se ocupe de check box), dar se poate ocupa de fișiere în cazul în care este mai ușor de a scrie un program C # care se poate ocupa de acest lucru.
Aș prefera o modalitate de a coda acest lucru eu însumi în loc să utilizeze un program de terță parte pentru a evita să instalați nimic pe server ruleaza pe acest. Orice ajutor este foarte apreciat.
Editare: Practic, cum pot automatiza apelul la JavaScript care este legată de faptul că „Select All“ caseta de selectare , astfel că pot apuca pagina HTML care conține totul e care este afișată după ce faceți clic pe caseta.
Edit 2: Iată de ieșire de la 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
Primesc în prezent 500 de ERORI de pe server. Am nevoie pentru a include toate aceste GenericWebUserControls în cererea de post, precum? De asemenea, am nevoie pentru a include EVENTVALIDATION?
EDIT 3: Iată cele mai recente cod. Sunt încă obtinerea de server 500 de erori.
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: Am stabilit că este șirul de POSTDATA care cauzează eroarea de server 500. Dacă am face un șir gol, va fi afișat întreaga pagina web. Stie cineva dacă sunt corect în a avea de a pune tot ce a venit de la Fiddler2 care a avut o valoare în șirul POSTDATA? De asemenea, că __VIEWSTATE este un șir incredibil de lung. Există limite sau ceva nu sunt sigur?
EDIT 5: am fugit toate șirurile folosite în POSTDATA printr - un encoder URL - ul, dar eu sunt încă obtinerea de server 500 de erori. Există vreo modalitate pentru mine pentru a depana de ce acest organism post este nevalid?
SOLUȚIE: Ok, nu am putut obține șirul meu POSTDATA corect, dar când am inserat în corpul POST brut funcționează. Acest lucru se pare ca va fi destul de bun, dar preocuparea mea este dacă acest lucru va continua să lucreze.













