http://www.morningstar.com에 로그인하고 http://financials.morningstar.com/income-statement/is.html?t=BTDPF®ion=usa&culture=en-US에 대한 정보를 검색하려면 C# 및 Chrome 웹 검사기를 사용하려고합니다.C# HttpClient를 사용하여 웹 사이트에 로그인하고 다른 페이지의 정보를 긁음
Web Inspector의 정보를 해석하여 로그인을 시뮬레이트하고 세션을 유지하고 정보를 수집하기 위해 다음 페이지로 이동하는 데 사용해야하는 정신적 프로세스가 무엇인지 이해하지 못합니다.
자원에 대한 설명이나 지적이 가능한 사람이 있습니까? 지금은
, 나는 홈 페이지의 내용과 로그인 페이지를 얻기 위해 일부 코드가 있습니다 :
public class Morningstar
{
public async static void Ru4n()
{
var url = "http://www.morningstar.com/";
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
var response = await httpClient.GetAsync(new Uri(url));
response.EnsureSuccessStatusCode();
using (var responseStream = await response.Content.ReadAsStreamAsync())
using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress))
using (var streamReader = new StreamReader(decompressedStream))
{
//Console.WriteLine(streamReader.ReadToEnd());
}
var loginURL = "https://members.morningstar.com/memberservice/login.aspx";
response = await httpClient.GetAsync(new Uri(loginURL));
response.EnsureSuccessStatusCode();
using (var responseStream = await response.Content.ReadAsStreamAsync())
using (var streamReader = new StreamReader(responseStream))
{
Console.WriteLine(streamReader.ReadToEnd());
}
}
편집 : 결국, 모하메드의 조언에, 나는 다음과 같은 부분을 사용 코드 :
ScrapingBrowser browser = new ScrapingBrowser();
//set UseDefaultCookiesParser as false if a website returns invalid cookies format
//browser.UseDefaultCookiesParser = false;
WebPage homePage = browser.NavigateToPage(new Uri("https://members.morningstar.com/memberservice/login.aspx"));
PageWebForm form = homePage.FindFormById("memberLoginForm");
form["email_textbox"] = "[email protected]";
form["pwd_textbox"] = "password";
form["go_button.x"] = "57";
form["go_button.y"] = "22";
form.Method = HttpVerb.Post;
WebPage resultsPage = form.Submit();