我有以下内容:
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。
我该如何解决这个问题?
答案 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