Прямо сейчас я пытаюсь использовать WebBrowser, чтобы щелкнуть элемент. С помощью следующего кода я запускаю поток.
Thread thread = new Thread(Setting3);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Внутри этого потока я запускаю следующий код для создания и использования этого webBrowser.
WebBrowser b = new WebBrowser();
b.Navigate("https://example.com/find?id = " + id);
await WaitForPage(10, b); // waits for page to be loaded
b.Document.GetElementById("MyElement").InvokeMember("Click");
b.Dispose();
WaitForPage ()
private async Task WaitForPage(int TimeOut, WebBrowser Browser)
{
TaskCompletionSource<bool> PageLoaded = null;
PageLoaded = new TaskCompletionSource<bool>();
int TimeElapsed = 0;
Browser.DocumentCompleted += (s, e) =>
{
if (Browser.ReadyState != WebBrowserReadyState.Complete) return;
if (PageLoaded.Task.IsCompleted) return; PageLoaded.SetResult(true);
};
while (PageLoaded.Task.Status != TaskStatus.RanToCompletion)
{
await Task.Delay(10);
TimeElapsed++;
if (TimeElapsed >= TimeOut * 100) PageLoaded.TrySetResult(true);
}
}
Проблема, с которой я столкнулся, заключается в том, что элемент не нажимается, это происходит, если он находится в основном потоке, если я делаю это с элементом управления webBrowser, который не создается программно, тогда он работает без проблем. Я также пытаюсь использовать как можно меньше памяти при щелчке по элементу. Понятия не имею почему, ошибок не выдает, просто тред выходит.
@JordyvanEijk Добавлен
Можно ли также отправить HTML-код по вашему запросу? Я думаю, вы не звоните на example.com :) Возможно, у вас неправильный идентификатор, есть ли у вас отличия?
@JordyvanEijk Без исключений, у меня также есть только что установленный идентификатор. После его создания поток завершается.
Удар - не знаю, работает это или противоречит правилам.





Можете ли вы также опубликовать функцию WaitForPage?