WebBrowser не удается загрузить страницу с javascript

446
20 февраля 2017, 12:07

Необходимо парсить страницу с использованием HtmlAgilityPack, но некоторые нужные поля загружаются из JS. Как загрузить страницу полностью после выполнения всех скриптов? К примеру, вот этот код получает данные которые есть в HTML без JS:

 public string GetNumberOrders(string URL)
    {
        string result = "";
        HtmlAgilityPack.HtmlDocument doc = new HtmlWeb().Load(URL);
        doc.OptionFixNestedTags = true;
        HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id='j-order-num']");
        result += node.InnerHtml;
        return result;
    }

А вот так я пытаюсь вытянуть страницу с выполненным JS:

web1.ObjectForScripting = new MyScript();
        web1.ScriptErrorsSuppressed = true;
        web1.Navigate(URL);
        waitTillLoad(web1);
        web1.Document.InvokeScript("some_func");
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)web1.Document.DomDocument;
        StringReader sr = new StringReader(documentAsIHtmlDocument3.documentElement.outerHTML);
        doc.Load(sr);
        result = doc.DocumentNode.OuterHtml;

Поскольку названия функций неизвестны, их не получается выполнить через Document.InvokeScript(). Как выполнить все функции не используя InvokeScript?

UPD Решено:

        webControl1.Source = new Uri(URL);
        while(webControl1.IsLoading)
        {
            Application.DoEvents();
        }
        return webControl1.ExecuteJavascriptWithResult("document.documentElement.outerHTML").ToString();
Answer 1

Сам долго мучался используя стандартный webbrowser и парсеры типа HtmlAgilityPack. Советую выполнять через webdriver от selenium, в нем есть driver PhantomJS, позволяющий работать в фоне без лишних окон и с полной поддержкой javascript.

IWebDriver Driver=new PhantomJSDriver();
READ ALSO
Android C#: автоматическая посылка SMS из сервиса

Android C#: автоматическая посылка SMS из сервиса

У меня в приложении, написанном на C# в Xamarin Studio имеется сервис, из которого нужно автоматически в нужный моент слать SMS на заданный номер с заданным...

305
Зачем нужны шаблонизаторы (компонент view в MVC)?

Зачем нужны шаблонизаторы (компонент view в MVC)?

Сейчас делаю небольшой проект с использованием MVC фреймворка Django на pythonВ любом MVC view представляется в виде какого-нибудь шаблонизатора

277
Значение в @Html.EditorFor по умолчанию в ASP.Net MVC

Значение в @Html.EditorFor по умолчанию в ASP.Net MVC

Доброго времени суток! Не могу разобраться как установить для поле значение по умолчанию в проекте aspnet mvc 4

381
Требует ли Auth2 в ASP.NET сертификат SSL?

Требует ли Auth2 в ASP.NET сертификат SSL?

Регистрация через внешние сервисы на localhost без SSL работаетКогда поставил сайт на хостинг, никакой сервис не работает

202