c httpclient抓取网页(我正在尝试使用C#和ChromeWebInspector登录并在)
优采云 发布时间: 2021-10-28 07:11c httpclient抓取网页(我正在尝试使用C#和ChromeWebInspector登录并在)
问题
我正在尝试使用 C# 和 Chrome Web Inspector 登录并进入。
我不太了解人们必须用来解释 Web Inspector 中的信息以模拟登录和模拟维护会话并导航到下一页以采集信息的心理过程。
有人可以向我解释或指点我吗?
目前,我只有一些代码来获取主页和登录页面的内容:
公共类Morningstar
{
公共异步静态无效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();
使用(var responseStream =等待response.Content.ReadAsStreamAsync())
使用(var decompressedStream = new GZipStream(responseStream,CompressionMode.Decompress))
使用(var streamReader = new StreamReader(decompressedStream) ))
{
//Console.WriteLine(streamReader.ReadToEnd());
}
var loginURL =" https://members.morningstar.com/memberservice/login.aspx";
response =等待httpClient.GetAsync(new Uri(loginURL));
response.EnsureSuccessStatusCode();
使用(var responseStream =等待response.Content.ReadAsStreamAsync())
使用(var streamReader = new StreamReader(responseStream))
{
Console.WriteLine(streamReader.ReadToEnd( ));
}
}
编辑:最后,按照穆罕默德的建议,我使用了以下代码:
ScrapingBrowser浏览器= new ScrapingBrowser();
//如果网站返回的cookie格式无效,则将UseDefaultCookiesParser设置为false
//browser.UseDefaultCookiesParser = false;
网页主页=浏览器。NavigateToPage(新Uri(" https://members.morningstar.com/memberservice/login.aspx"));
PageWebForm form = homePage.FindFormById(" memberLoginForm");
form [" email_textbox"] =" example@example.com";
form [" pwd_textbox"] ="密码";
form [" go_button.x"] =" 57";
form [" go_button.y"] =" 22";
form.Method = HttpVerb.Post;
WebPage resultsPage = form.Submit();
解决方案
你应该模拟网站的登录过程。最简单的方法是通过一些调试器(如 Fiddler)检查 网站。
以下是网站的登录请求:
POST https ://members.morningstar.com/memberservice/login.aspx?CustId =& CType =& CName =& RememberMe = true& CookieTime = HTTP / 1.1
接受:text / html,application / xhtml + xml,* / *
推荐人:https://members.morningstar.com/memberservice/login.aspx
**省略**
Cookie:cookies = true; TestCookieExist =存在; fp = 001140581745182496; __utma = 172984700.91600904.1405817457.1405817457.1405817457.1; __utmb = 172984700.8.10.1405817457; __utmz = 172984700.1405817457.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无); __utmc = 172984700; ASP.NET_SessionId = b5bpepm3pftgoz55to3ql4me
email_textbox=test@email.com& pwd_textbox = password& remember = on& email_textbox2 =& go_button.x = 36& go_button.y = 16& ____ LAST =& __ EVENTARGUMENT =& __ VIEWSTATE =省略& __ EVENTVALIDATION =省略
您将看到一些 cookie 和表单字段,例如“__VIEWSTATE”。需要输入这个文件的实际值才能登录,可以使用以下步骤:
提出请求并删除“__LASTFOCUS”、“__EVENTTARGET”、“__EVENTARGUMENT”、“__VIEWSTATE”、“__EVENTVALIDATION”;
在同一页面上创建一个新的 POST 请求,使用上一个的 CookieContainer;使用废弃的字段、用户名和密码来构造帖子字符串。使用 MIME 类型应用程序/x-www-form-urlencoded 来发布。
如果成功,请使用 cookie 进行进一步请求以保留记录
注意:您可以使用 htmlagilitypack 或 scrapysharp 丢弃 html。ScrapySharp 提供了易于使用的表单发布和浏览工具网站。