Анализ веб-страницы JavaScript на C # с помощью AngleSharp

Веб-страница использует javascript для создания своего html, поэтому мне нужен синтаксический анализатор html с поддержкой js.
Я нашел anglesharp, но не могу заставить его работать.

using AngleSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace AngleSharpScraping
{
    class Program
    {
        static void Main(string[] args)
        {
            GetMkvToolNix();
            Console.ReadKey();
        }

        static async void GetMkvToolNix()
        {
            // Create a new configuration with javascript interpreter.
            var config = new Configuration().WithJavaScript();

            // Parsing process.
            var document = await BrowsingContext.New(config).OpenAsync(Url.Create("http://www.fosshub.com/MKVToolNix.html"));
            var link = document.QuerySelector("body > div.container.page-content > div > div.col-sm-9 > article > div.main-dl-box > p:nth-child(2) > a.dwl-link.xlink").GetAttribute("data");

            Console.WriteLine(link);
        }
    }
}

person baltazer    schedule 07.06.2015    source источник
comment
Возможно, вы захотите изучить PhantomJS   -  person AlliterativeAlice    schedule 07.06.2015
comment
PhantomJS - внешнее приложение с js api. Также некоторые антивирусы видят в этом угрозу и показывают уродливые всплывающие окна с предупреждениями.   -  person baltazer    schedule 07.06.2015


Ответы (2)


Один только AngleSharp предоставляет только парсер HTML и CSS. Однако AngleSharp может быть расширен возможностями JavaScript. Прямо сейчас пакет, который вы использовали (AngleSharp.Scripting.JavaScript), является экспериментальное и более или менее доказательство концепции.

Файлы JavaScript на странице все еще слишком сложны для экспериментальной поддержки. Я стараюсь как можно скорее включить поддержку таких сценариев, но прямо сейчас я бы сказал, что WebKit.NET, вероятно, ваш лучший шанс решить вашу проблему.

Другое возможное решение - использовать драйвер C # для Selenium.

Не имеет отношения ко всей теме JavaScript: если вы хотите загружать внешние ресурсы, вам необходимо предоставить правильный (http) запросчик. Самый простой способ сделать это - использовать вариант по умолчанию:

var config = new Configuration().WithDefaultLoader();
var document = await BrowsingContext.New(config).OpenAsync("http://www.fosshub.com/MKVToolNix.html");
// ...

В этом параметре загружаются внешние документы, но другие ресурсы (например, изображения, сценарии и т. Д.) Не загружаются.

person Florian Rappl    schedule 08.06.2015
comment
Раньше у меня были странные проблемы с селеном, например, показывал ошибку браузера или диалог доступа к брандмауэру. WebKit.NET кажется неподдерживаемым или мертвым. В NuGet я нахожу CefSharp, но мне он показался слишком сложным. - person baltazer; 08.06.2015
comment
Я вижу, ну держитесь, и я пытаюсь улучшить поддержку JS. Только время здесь ограниченный ресурс. - person Florian Rappl; 08.06.2015
comment
Кто-нибудь получил Method 'EvaluateScriptAsync' in type 'AngleSharp.Scripting.JavaScript.JavaScriptEngine' from assembly 'AngleSharp.Scripting.JavaScript, Version=0.3.1.26954, Culture=neutral, PublicKeyToken=null' does not have an implementation.? просто запустив new Configuration().WithJavaScript()? Получаю то же самое, используя Configuration.Default.WithJavaScript() - person Veverke; 07.04.2016

AngleSharp - это анализатор текста. Если вы хотите очищать динамические веб-страницы с помощью JS, вам понадобится безголовый браузер.

В этом ответе есть несколько вариантов (по крайней мере, один бесплатный и открытый исходный код: WebKit.NET).

person zlumer    schedule 07.06.2015
comment
AngleSharp выполняет JavaScript с Jint: var config = new Configuration().WithJavaScript(); BrowsingContext должен действовать как настоящий браузер с обработкой сеанса и файлов cookie. - person baltazer; 07.06.2015