2015-10-20 74 views
0

所以我想刮一個網站的問題是,他們都是發佈請求,雖然整個搜索過程。Webclient Multipage POST&HTMLAgilityPack

因此,這裏是網站的我想回應後發送到進展... 1)https://www20.state.nj.us/LPS_spoff/SetSession - 原因貌似網站要你先接受這些條款,所以我送我接受後的反應。如果我不這樣做,其他站點將會重定向。

​​

上述工作並進入下一頁。所以現在我可以打開,

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相同),而不是它似乎重定向的結果。

總結: 我想獲得違規者的結果,但他們都是帖子回覆,我需要幫助導航到結果頁面高效。

注:我知道我大概可以使用硒但這是太多的開銷,我想要什麼?

回答

0

原來有是有責任的重定向與網站相關的cookies。

要繞過這個我用

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

,一切似乎是工作的罰款。如果發生這種情況,請檢查網站的Cookie。