2014-09-17 3 views
1

Я пытаюсь очистить некоторые графики от веб-сайта. информация отображается в GridView с пейджингом.Информация об лом из gridview с asp.net с поисковым вызовом

URL-адрес является: http://www.landmarkworldwide.com/when-and-where/register/search-results.aspx?prgid=0&pgID=270&crid=0&ctid=&sdt=0

Мой вопрос, когда я хочу, чтобы очистить со страниц других затем # 1 в виде сетки. Лучший пост, который я нашел до сих пор, был This One, но он не работает и эта тема не завершена. Я попытался использовать Fiddler и Chrome, чтобы получить данные публикации и использовать их, но я не могу заставить его работать на меня. Вы, ребята, видите, чего не хватает?

Вот код, который я использую. это в VB, но вы можете ответить на C#, и я буду переводить -) (извините)

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load 

    Dim lcUrl As String = "http://www.landmarkworldwide.com/when-and-where/register/search-results.aspx?prgid=0&pgID=270&crid=0&ctid=&sdt=0" 

    ' first, request the login form to get the viewstate value 
    Dim webRequest__1 As HttpWebRequest = TryCast(WebRequest.Create(lcUrl), HttpWebRequest) 
    Dim responseReader As New StreamReader(webRequest__1.GetResponse().GetResponseStream()) 
    Dim responseData As String = responseReader.ReadToEnd() 
    responseReader.Close() 

    ' extract the viewstate value and build out POST data 
    Dim viewState As String = ExtractViewState(responseData) 


    Dim loHttp As HttpWebRequest = DirectCast(WebRequest.Create(lcUrl), HttpWebRequest) 
    ' *** Send any POST data 

    Dim lcPostData As String = [String].Format("__VIEWSTATE={0}&__EVENTTARGET={1}&__EVENTARGUMENT={2}", viewState, HttpUtility.UrlEncode("contentwrapper_0$maincontent_0$maincontentfullwidth_0$ucSearchResults$gvPrograms"), HttpUtility.UrlEncode("Page$3")) 
    loHttp.Method = "POST" 

    Dim lbPostBuffer As Byte() = System.Text.Encoding.GetEncoding(1252).GetBytes(lcPostData) 
    loHttp.ContentLength = lbPostBuffer.Length 
    Dim loPostData As Stream = loHttp.GetRequestStream() 
    loPostData.Write(lbPostBuffer, 0, lbPostBuffer.Length) 
    loPostData.Close() 

    Dim loWebResponse As HttpWebResponse = DirectCast(loHttp.GetResponse(), HttpWebResponse) 
    Dim enc As Encoding = System.Text.Encoding.GetEncoding(1252) 

    Dim loResponseStream As New StreamReader(loWebResponse.GetResponseStream(), enc) 
    Dim lcHtml As String = loResponseStream.ReadToEnd() 

    loWebResponse.Close() 
    loResponseStream.Close() 
    Response.Write(lcHtml) 

End Sub 

Private Function ExtractViewState(s As String) As String 
    Dim viewStateNameDelimiter As String = "__VIEWSTATE" 
    Dim valueDelimiter As String = "value=""" 

    Dim viewStateNamePosition As Integer = s.IndexOf(viewStateNameDelimiter) 
    Dim viewStateValuePosition As Integer = s.IndexOf(valueDelimiter, viewStateNamePosition) 

    Dim viewStateStartPosition As Integer = viewStateValuePosition + valueDelimiter.Length 
    Dim viewStateEndPosition As Integer = s.IndexOf("""", viewStateStartPosition) 

    Return HttpUtility.UrlEncodeUnicode(s.Substring(viewStateStartPosition, viewStateEndPosition - viewStateStartPosition)) 
End Function 

ответ

-1

Чтобы сделать его работу необходимо отправить все поля ввода на странице, а не только ViewState. Другими важными данными являются __EVENTVALIDATION, например, что вы не обрабатываете его. Итак:

Сначала вам нужно сделать лом на странице №1. Загрузите его и используйте Html Agility Pack, чтобы преобразовать его в полезную структуру.

Затем извлеките из этой структуры входные данные, которые необходимо отправить. Из этого ответа HTML Agility Pack get all input fields вот код, который вы стреляли по тому, как вы можете это сделать.

foreach (HtmlNode input in doc.DocumentNode.SelectNodes("//input")) 
{ 
    // use this to create the post string 
    // input.Attributes["value"];   
} 

Затем, когда у вас есть данные сообщения, которые необходимы для правильной записи, вы переходите к следующему шагу. Вот пример How to pass POST parameters to ASP.Net web request?

Вы также можете прочитать: How to use HTML Agility pack

+0

Проблема специфична в постраничной выскабливание –

Смежные вопросы