我想下载并解析网页的HTML。最近,源网站从一个页面上的所有信息转移到隐藏在JavaScript后面的一部分。有一个“显示全部”复选框需要激活才能查看整个页面。ASP.NET屏幕刮贴模拟
这里的网站:Source Website
基本上我寻找已被点击复选框后自动检索该页面。目前,我们有一个C程序,用于下载网页并处理我们的解析。我不确定它是否可以在URL中接受JavaScript(如果可以用来解决此问题)(我尝试使用小书签从URL调用JavaScript,但我无法获得它来处理复选框),但是如果编写可以处理这个问题的C#程序更容易,它可以处理文件。
我更喜欢自己编写代码的方式,而不是使用第三方程序来避免在运行的服务器上安装任何东西。任何帮助是极大的赞赏。
编辑:基本上,我怎么可以自动调用链接到的是,JavaScript的“全选”复选框,这样我就可以抢包含HTML页中的一切是一个的点击复选框后显示。
编辑2: 下面是来自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
我目前正在从服务器获取500错误。我是否也需要在发布请求中包含所有这些GenericWebUserControls?我是否也需要包含EVENTVALIDATION?
编辑3: 这里有最新的代码。我仍然收到服务器500错误。
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);
}
编辑4: 我已经决定了它是一个的造成服务器的500错误的POSTDATA字符串。如果我将它设为空字符串,它会输出整个网页。有谁知道我是否必须将来自Fiddler2的具有值的所有内容放入postData字符串中?另外,__VIEWSTATE是一个令人难以置信的长字符串。有没有限制或任何我不确定的事情?
编辑5: 我跑了所有通过URL编码器POSTDATA使用的字符串,但我仍然得到500服务器错误。有没有什么方法可以调试为什么这个帖子主体是无效的?
SOLUTION: 好吧,我不能让我的POSTDATA字符串是正确的,但是当我在原始的POST体粘贴它的工作原理。这看起来会很好,但我担心这是否会继续工作。
你能把它作为一个问题来形容吗? – 2009-07-23 15:19:06