C#WebBrowser:HTTP POST后无法获取最新的网页HTML?

时间:2014-05-13 01:03:37

标签: c# html http post webbrowser-control

我有以下内容:

   protected static void GetWebPageWorker()
   {
       using (WebBrowser browser = new WebBrowser())
       {
           //  browser.ClientSize = new Size(_width, _height);
           browser.ScrollBarsEnabled = false;
           browser.ScriptErrorsSuppressed = true;
           browser.Navigate(_url);

           // Wait for control to load page
           while (browser.ReadyState != WebBrowserReadyState.Complete)
               Application.DoEvents();

           //Insert the search term in to the input textfield
           browser.Document.GetElementById(search_div_id).OuterText = search_term;

           //Click on the search button (POST request)
           browser.Document.GetElementById(search_button_id).InvokeMember("Click");

           //This didn't work
           //browser.Update();

           while (browser.ReadyState != WebBrowserReadyState.Complete)
               Application.DoEvents();

           //PROBLEM this is returning the original HTML before POST
           //and not the HTML from the web page after the POST.
           html = browser.DocumentText;
       }
   }

它插入一个值以在HTML元素中搜索,然后单击搜索按钮并完成POST。但是,WebBrowser对象似乎没有刷新其DocumentText属性,因此我可以在单击搜索按钮后返回页面的HTML。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

WebBrowser很可能是此任务的错误工具。当您希望实际能够在屏幕上看到网页时,可以使用WebBrowser。看起来你只是试图发布一些内容并得到结果。

尝试使用WebClient,它更简单,对POST更好:

using (var client = new WebClient())
{
    client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; 
           MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; 
          .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

    const string url = "http://www.example.com";    

     var inputs = new NameValueCollection {
         {"search_div_id", search_term},
     }

    var response = client.UploadValues(url, inputs);
    string html = Encoding.UTF8.GetString(response);
}

答案 1 :(得分:0)

调用“单击成员函数”后,请使用以下语句。它肯定会工作。

`HtmlElement hleGetData = (HtmlElement)hdoc.GetElementById("getButton");
hleGetData.InvokeMember("click");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
    System.Windows.Forms.Application.DoEvents();
};
//Some DoEvents....
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.DoEvents();`

答案 2 :(得分:0)

webBrowser1.Refresh();webBrowser1.Update(); POST请求后无法正常工作。

while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
        {
            System.Windows.Forms.Application.DoEvents();
           //System.Threading.Thread.Sleep(500);
        }

也不要工作。

目前唯一的方法是使用webBrowser1.Navigate("URL"); 在每个POST请求之后再次输入。

Microsoft Visual Studio社区2019 版本16.7.5 VisualStudio.16.Release / 16.7.5 + 30523.141 Microsoft .NET Framework 版本4.8.03752