我正在进行屏幕抓取并在3个网站上成功完成,我在上一个网站上有一个问题
这是我的网址,当我点击我的参数时,它会在下一页显示结果,只是发布到其他页面并在其他页面上显示结果
然而,当我从我的应用程序中点击时,由于这里我没有选项发布,它只获取请求页面的html,这显然是我上面提到的HTML测试链接,实际上在URL中有参数来获取结果
我该如何处理这种情况? 请给我提示。
由于
这是我的C#代码,我正在使用HTMLAgality
String url;
HtmlWeb hw = new HtmlWeb();
HtmlDocument doc;
url = "http://mysampleURL";
doc = hw.Load(url);
答案 0 :(得分:3)
使用WebClient类发布包含预期输入值的第一页的表单。输入值可以在第一页的源代码中找到,但也可以使用Fiddler捕获它们,这对于这些场景来说是一个很好的工具。
示例:
NameValueCollection values = new NameValueCollection();
values.Add("action","hotelPackageWizard@searchHotelOnly");
values.Add("packageType","HOTEL_ONLY");
// etc..
WebClient webclient = new WebClient();
webclient.Headers.Add("Content-Type","application/x-www-form-urlencoded");
byte[] responseArray = webclient.UploadValues("http://www.expedia.com/Hotels?rfrr=-905&","POST", values);
string response = System.Text.Encoding.ASCII.GetString(responseArray);
答案 1 :(得分:2)
如果资源需要POST,那么你必须提交一个POST。
这是一项相当简单的任务。以下是Rick Strahl's blog的示例。代码有点质朴但有效,可以让你走向正确的方向
string lcUrl = "http://www.west-wind.com/testpage.wwd";
HttpWebRequest loHttp =
(HttpWebRequest) WebRequest.Create(lcUrl);
// *** Send any POST data
string lcPostData =
"Name=" + HttpUtility.UrlEncode("Rick Strahl") +
"&Company=" + HttpUtility.UrlEncode("West Wind ");
loHttp.Method="POST";
byte [] lbPostBuffer = System.Text.
Encoding.GetEncoding(1252).GetBytes(lcPostData);
loHttp.ContentLength = lbPostBuffer.Length;
Stream loPostData = loHttp.GetRequestStream();
loPostData.Write(lbPostBuffer,0,lbPostBuffer.Length);
loPostData.Close();
HttpWebResponse loWebResponse = (HttpWebResponse) loHttp.GetResponse();
Encoding enc = System.Text.Encoding.GetEncoding(1252);
StreamReader loResponseStream =
new StreamReader(loWebResponse.GetResponseStream(),enc);
string lcHtml = loResponseStream.ReadToEnd();
loWebResponse.Close();
loResponseStream.Close();
答案 2 :(得分:0)
对于涉及发布表单(如登录,维护cookie,处理XSRF令牌)的屏幕抓取任务,一种解决方案是使用CURL。但这并不容易。
然后我探索了Selenium并且我喜欢它。有两件事 - 1)安装Selenium IDE(仅适用于Firefox)。 2)安装Selenium RC Server
启动Selenium IDE后,转到您尝试自动执行的站点,并开始记录您在站点上执行的事件。将其视为在浏览器中录制宏。然后,您将获得所需语言的代码输出。
您知道Browsermob使用Selenium进行负载测试以及在浏览器上自动执行任务。
我已经上传了一段我曾经做过的ppt。这可以为您节省大量时间 - http://www.4shared.com/get/tlwT3qb_/SeleniumInstructions.html
在上面的链接中选择常规下载选项。
我花了很多时间搞清楚,所以认为这可以节省一些人的时间。