Mogę Ci powierzyć HtmlAgilityPack!
Chciałbym myśleć, że próbujesz uzyskać dostęp do strony internetowej, która używa plików cookie do określenia, czy użytkownik jest zalogowany (lub nie). Jeśli nie, wymusi rejestrację/zalogowanie się, inaczej nie wolno ci nic zobaczyć. Czy mam rację?
Twoja przeglądarka zapisuje pliki cookie, twoje C# nie! (ogólnie mówiąc)
Musisz utworzyć pojemnik z plikami cookie, aby rozwiązać ten problem.
Twoja C# -App może zalogować się, zażądać pliku cookie/sesji, może pobrać pliki cookie z głowicy reakcyjnej, a następnie powinieneś być w stanie zeskrobać profile lub cokolwiek zechcesz.
Uzyskaj dane pocztowe, które są wysyłane na serwer. Możesz użyć narzędzi/dodatków, takich jak Fiddler, Sabotaż, itp.
E.g. PostdataString: nazwa_użytkownika = testuser & hasło = TESTPASSWORD & language = pl & akcja% 3Asubmit = Zatwierdź
Oto fragment można użyć.
//Create the PostData
string strPostData = "user_name=" + txtUser.Text + "&password=" + txtPass.Text + "&language=en&action%3Asubmit=Submit";
CookieContainer tempCookies = new CookieContainer();
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(strPostData);
//Create the Cookie
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.website.com/login.php");
request.Method = "POST";
request.KeepAlive = true;
request.AllowAutoRedirect = false;
request.Accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.ContentType = "application/x-www-form-urlencoded";
request.Referer = "http://www.website.com/login.php";
request.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1";
request.ContentLength = data.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(data, 0, data.Length);
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
string sRequestHeaderBuffer = Convert.ToString(response.Headers);
requestStream.Close();
//Stream(-output) of the new website
StreamReader postReqReader = new StreamReader(response.GetResponseStream());
//RichTextBox to see the new source.
richTextBox1.Text = postReqReader.ReadToEnd();
Będziesz musiał dostosować parametry Cookie pomiędzy i dodać swój bieżący identyfikator sesji również do kodu. To zależy od żądanej strony internetowej, którą odwiedzasz.
np .:
request.Headers.Add("Cookie", "language=en_US.UTF-8; StationID=" + sStationID + "; SessionID=" + sSessionID);
POF warunki użytkowania nie pozwalają skrobanie. – albattran
Użyj swojego debuggera i przejdź przez kod. Umieść punkt przerwania w linii 'doc.GetElementsByTagName (.... ', a następnie sprawdź, co jest zwracane przez element' GetElementsByTagName ("textarea") '. Czy zawiera element' message'? Czy jest to tablica lub po prostu jeden element: – NotMe
@ Chrześcijanin Widzę nadawcę {wiadomość} i podstawową {wiadomość}? – IceDawg