私は c# とその概念に慣れていないので、この質問がばかげている場合は申し訳ありません。winforms webbrowser コントロールを使用して自動化を試みます
elements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in elements)
{
if (element.GetAttribute("value") == "Anzeigen")
element.InvokeMember("click");
}
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
// do some math on recived html
// ......
// show results
MessageBox.Show(numPlanets.ToString() );
説明すると、「Anzeigen」という値のボタンを探してクリックをシミュレートし、新しいページが読み込まれるまで待ってから計算を行います。残念ながら、私の計算は、ページが読み込まれるのを待っていないため、古い HTML コンテンツで行われます。奇妙なことに、Thread.Sleep(5000); を入力すると、foreach ループの後、クリックがシミュレートされる前にこの Sleep が実行され、計算も失敗します。
イベントを使用せずに、そのクリックに対して同期動作が必要なだけです。
あなたがそれで私を助けてくれることを願っています、私の悪い英語でごめんなさい
編集:次のように解決しました:クラス内の変数bool webbbrowserfinished = false、同期動作が必要な場合は、次のようにします:
webbrowserfinished = false;
// do navigation here
while (!webbrowserfinished)
{
Application.DoEvents();
Thread.Sleep(100);
}
webbrowserfinished = false;