Webclient Multipage POST & HTMLAgilityPack
Webclient Multipage POST & HTMLAgilityPack
所以我正在尝试抓取一个网站,问题是在整个搜索过程中它们都是 post 请求。
所以这是我要发送 post 响应的网站的进度...
1) https://www20.state.nj.us/LPS_spoff/SetSession
- 原因 看起来网站希望您先接受条款,所以我发送了一个我接受 post 回复。如果我不这样做,后面的其他站点将重定向。
using (var wb = new WebClient())
{
var data1 = new NameValueCollection();
data1["submit"] = "I accept";
var response1 = wb.UploadValues("https://www20.state.nj.us/LPS_spoff/SetSession", "POST", data1);
// more code here to be show later
}
以上有效并进入下一页。所以现在我可以打开了,
2) https://www20.state.nj.us/LPS_spoff/geographicsearch.jsp - 这个 link 没有被重定向并且真的不需要这个 link 不确定我是否需要发送另一个 post 但是.. .我真正想要的是
3) https://www20.state.nj.us/LPS_spoff/findDriver - 此结果页面来自任何选择...
这是为页面手动提交的表单...
<form name="gsm" method="post" action="/LPS_spoff/findDriver"></form>
<input type="hidden" name="screen" value="1">
<input type="hidden" name="county" value=" 01 ">
<input type="hidden" name="countyname" value=" ATLANTIC ">
<input type="hidden" name="pmonth" value=" ">
<input type="hidden" name="pday" value=" ">
<input type="hidden" name="pyr" value=" ">
<tbody><tr><td align="center" colspan="4"> You chose <b> ATLANTIC </b> County.
</td></tr><tr><td align="center" colspan="4"> You can either submit this search using all of
<b> ATLANTIC </b> County by pressing
<input type="submit" name="Submit" value="Submit"></td><td></td></tr>
这是我总共尝试过的:
using (var wb = new WebClient())
{
var data1 = new NameValueCollection();
data1["submit"] = "I accept";
var response1 = wb.UploadValues("https://www20.state.nj.us/LPS_spoff/SetSession", "POST", data1);
var data = new NameValueCollection();
data["screen"] = "1";
data["county"] = "01";
data["countyname"] = "ATLANTIC";
data["pmonth"] = " ";
data["pday"] = " ";
data["pyr"] = " ";
data["Submit"] = "Submit";
var response = wb.UploadValues("https://www20.state.nj.us/LPS_spoff/findDriver", "POST", data);
Console.WriteLine(Encoding.Default.GetString(response));
File.WriteAllText("temp.txt", Encoding.Default.GetString(response));
}
目标是到达结果页面并使用 HTMLagilitypack 对其进行解析。
上面的代码输出一个文件 temp.txt,它与上面列表中的站点 1) 相同...而不是它似乎重定向的结果。
总结一下:
我想获得违规者的结果,但它们都是 post 回复,我需要帮助才能有效地导航到结果页面。
注意:我知道我可能可以使用 selenium,但这对我想要的东西来说开销太大了...
原来有与负责重定向的网站关联的 cookie。
为了绕过这个,我使用了
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
而且似乎一切正常。如果您遇到这种情况,请检查网站是否有 cookie。
所以我正在尝试抓取一个网站,问题是在整个搜索过程中它们都是 post 请求。
所以这是我要发送 post 响应的网站的进度... 1) https://www20.state.nj.us/LPS_spoff/SetSession - 原因 看起来网站希望您先接受条款,所以我发送了一个我接受 post 回复。如果我不这样做,后面的其他站点将重定向。
using (var wb = new WebClient())
{
var data1 = new NameValueCollection();
data1["submit"] = "I accept";
var response1 = wb.UploadValues("https://www20.state.nj.us/LPS_spoff/SetSession", "POST", data1);
// more code here to be show later
}
以上有效并进入下一页。所以现在我可以打开了,
2) https://www20.state.nj.us/LPS_spoff/geographicsearch.jsp - 这个 link 没有被重定向并且真的不需要这个 link 不确定我是否需要发送另一个 post 但是.. .我真正想要的是
3) https://www20.state.nj.us/LPS_spoff/findDriver - 此结果页面来自任何选择...
这是为页面手动提交的表单...
<form name="gsm" method="post" action="/LPS_spoff/findDriver"></form>
<input type="hidden" name="screen" value="1">
<input type="hidden" name="county" value=" 01 ">
<input type="hidden" name="countyname" value=" ATLANTIC ">
<input type="hidden" name="pmonth" value=" ">
<input type="hidden" name="pday" value=" ">
<input type="hidden" name="pyr" value=" ">
<tbody><tr><td align="center" colspan="4"> You chose <b> ATLANTIC </b> County.
</td></tr><tr><td align="center" colspan="4"> You can either submit this search using all of
<b> ATLANTIC </b> County by pressing
<input type="submit" name="Submit" value="Submit"></td><td></td></tr>
这是我总共尝试过的:
using (var wb = new WebClient())
{
var data1 = new NameValueCollection();
data1["submit"] = "I accept";
var response1 = wb.UploadValues("https://www20.state.nj.us/LPS_spoff/SetSession", "POST", data1);
var data = new NameValueCollection();
data["screen"] = "1";
data["county"] = "01";
data["countyname"] = "ATLANTIC";
data["pmonth"] = " ";
data["pday"] = " ";
data["pyr"] = " ";
data["Submit"] = "Submit";
var response = wb.UploadValues("https://www20.state.nj.us/LPS_spoff/findDriver", "POST", data);
Console.WriteLine(Encoding.Default.GetString(response));
File.WriteAllText("temp.txt", Encoding.Default.GetString(response));
}
目标是到达结果页面并使用 HTMLagilitypack 对其进行解析。
上面的代码输出一个文件 temp.txt,它与上面列表中的站点 1) 相同...而不是它似乎重定向的结果。
总结一下: 我想获得违规者的结果,但它们都是 post 回复,我需要帮助才能有效地导航到结果页面。
注意:我知道我可能可以使用 selenium,但这对我想要的东西来说开销太大了...
原来有与负责重定向的网站关联的 cookie。
为了绕过这个,我使用了
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
而且似乎一切正常。如果您遇到这种情况,请检查网站是否有 cookie。