【问题标题】:Webclient Multipage POST & HTMLAgilityPackWebclient 多页 POST 和 HTMLAgilityPack
【发布时间】:2015-10-20 13:28:24
【问题描述】:

所以我试图抓取一个网站,问题是它们在整个搜索过程中都是发布请求。

所以这是我试图发送帖子回复的网站的进展...... 1)https://www20.state.nj.us/LPS_spoff/SetSession - 原因 看起来该网站希望您先接受这些条款,所以我发送了一个我接受的帖子回复。如果我不这样做,以下其他网站将重定向。

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 - 这个链接没有被重定向,真的不需要这个链接不确定如果我需要发送另一个帖子但是......我真正想要的是

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>&nbsp; ATLANTIC </b> County by pressing &nbsp;
        <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) 相同......而不是它似乎重定向的结果。

总结一下: 我想获取违规者的结果,但它们都是帖子回复,我需要帮助才能有效地导航到结果页面。

注意:我知道我可能可以使用 selenium,但这对于我想要的东西来说开销太大了......

【问题讨论】:

    标签: c# html webclient


    【解决方案1】:

    原来有与负责重定向的网站相关联的 cookie。

    为了绕过这个我使用了

      var cookieContainer = new CookieContainer();
            using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
            using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
    

    一切似乎都运行良好。如果您遇到这种情况,请检查网站是否有 cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 2014-04-04
      相关资源
      最近更新 更多