WebBrowser.Navigate с JavaScript - PullRequest
       5

WebBrowser.Navigate с JavaScript

0 голосов
/ 05 декабря 2018

Я использую компонент WebBrowser в System.Windows.Forms.Код загружает контент с веб-сайта и возвращает его правильно.Существует JavaScript, который выполняется и загружает некоторые DOM после полной загрузки страницы.

JavaScript не завершает загрузку к тому времени, когда метод .Navigate завершил выполнение.Если я установлю точку останова на .Navigate в режиме отладки, то, очевидно, потому что .Navigate является асинхронным, будет проходить процесс загрузки страницы, включая сценарии.

void LoadPageWithScripts() {
  Browser.Navigate("mypagewithscriptsurl");
  // whatever comes next prevents the DOM generated by the script from beeing loaded

  // ... e.g.:
  Console.WriteLine("whatever");

  // use Browser.Document later
}

Я знаю, этот вопросаналогично приведенному здесь: JavaScript работает только ...

К сожалению, у меня нет влияния на загруженную страницу, поэтому подходы, которые я там видел, не подходят длямои потребности.

Я пытался просто работать с Thread.Sleep, как предлагали многие форумы.Но даже это не сработает.Как только код продолжает выполняться после метода .Navigate, JavaScript теряется.В настоящее время будет работать только установка точки останова.

Browser.Navigate ("pageUrl");

Browser.Navigate("pageurl");

// Very bad solution
Thread.Sleep(2000);

while (true)
{
    if (Browser.ReadyState == WebBrowserReadyState.Complete)
    {
        // do something
        break;
    }
    else
    {
        Application.DoEvents();
    }
}

Использование события DocumentCompleted не будет работать, так как сценарий не загружается ранеедокумент в завершенном состоянии.

Browser.Navigate("pageUrl");

Browser.DocumentCompleted += (o, e) =>
{
    var text = Browser.DocumentText;
    Console.WriteLine(text);
};

Надеюсь найти помощь.

...