public partial class WebBrowserForm : Form
{
public WebBrowserForm()
{
InitializeComponent();
webBrowser.Navigate("http://ya.ru");
}
private void PlayButtonClick(object sender, EventArgs e)
{
_documentCompleted = false;
webBrowser.DocumentCompleted += BrowserDocumentCompleted;
var input = webBrowser.Document.All
.Cast<HtmlElement>()
.Where(elem => elem.GetAttribute("id") == "text")
.First();
input.Focus();
SendKeys.SendWait("mercedes");
SendKeys.SendWait("{ENTER}");
while (webBrowser.ReadyState != WebBrowserReadyState.Complete || !_documentCompleted)
Application.DoEvents();
webBrowser.DocumentCompleted -= BrowserDocumentCompleted;
return; // (!!!)
}
void BrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
_documentCompleted = true;
}
private bool _documentCompleted;
}
私は次のような状況にあります。上記のフォームのボタンは、検索エンジンにクエリを入力しようとします。Yandexはメルセデスをリクエストし、検索をアクティブにして(Enterキーを押す)、検索エンジンを返すhtmlコードを分析します。問題は、コメント(!!!)を使用してコードにブレークポイントを設定すると、webBrowser.Document.Body.InnerHtmlhtmlコードの特定のポイントに検索結果が保存されないことです。さまざまなブラウザイベントを無駄に試しました。 c-sharp-webbrowser-button-click-then-go-to-another-pageこのリンクにも同様の問題がありますが、私の場合は実現していません。
Framework 4.0 VS2010 Windows 7 Ultimatex64IE9.0。前もって感謝します。