2015-06-07 4 views
5

Веб-страница использует javascript для построения своего html, поэтому мне нужен html-парсер с поддержкой js.
Я нашел anglesharp, но я не могу заставить его работать.Анализ веб-страницы JavaScript в C# с помощью 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); 
     } 
    } 
} 
+0

Может захотеть заглянуть в [PhantomJS] (http://phantomjs.org/) – AlliterativeAlice

+1

PhantomJS - это внешнее приложение с js api. Также некоторые антивирусы рассматривают это как угрозу и показывают уродливые всплывающие окна. – baltazer

ответ

2

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

This answer предлагает несколько вариантов (по крайней мере один свободный и открытый источник: WebKit.NET).

+5

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

3

Только 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"); 
// ... 

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

+0

Раньше у меня были какие-то странные проблемы с селеном, например, с отображением ошибки браузера или диалогом доступа к брандмауэру. WebKit.NET кажется неподдерживаемым или мертвым. На NuGet я нахожу CefSharp, но я нашел его сложным. – baltazer

+0

Я вижу, ну, повесьте там, и я стараюсь улучшить поддержку JS. Здесь только ограниченный ресурс. –

+0

Кто-нибудь получил 'Method 'EvaluateScriptAsync' в типе 'AngleSharp.Scripting.JavaScript.JavaScriptEngine' из сборки 'AngleSharp.Scripting.JavaScript, Version = 0.3.1.26954, Culture = neutral, PublicKeyToken = null' не имеет реализации .' ? просто запуская 'new Configuration(). WithJavaScript()'? Я получаю то же самое, используя 'Configuration.Default.WithJavaScript()' – Veverke

 Смежные вопросы

  • Нет связанных вопросов^_^