С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 22

AngleSharp and JS

01.12.2018, 14:38. Показов 8230. Ответов 10

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Делаю парсер с использованием AngleSharp. Столкнулся с проблемой, что не могу распарсить элементы, которые формируются с помощью скрипта.

Пробовал так, как в примере на гитхабе, результат все тот же
C#
1
2
3
4
var config = Configuration.Default.WithJavaScript().WithCss().WithDefaultLoader();
                var source1 = await new HtmlLoader(url).GetSource();
 
                var document1 = await BrowsingContext.New(config).OpenAsync(m => m.Content(source1));
класс HtmlLoader
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class HtmlLoader
    {
        private readonly HttpClient client;
        private string url;
 
        public HtmlLoader(string url)
        {
            client = new HttpClient();
            this.url = url;
        }
 
        public async Task<string> GetSource(IConfiguration config = null)
        {
            var response = await client.GetAsync(url);
            string source = null;
 
            if (response != null && response.StatusCode == HttpStatusCode.OK)
            {
                source = await response.Content.ReadAsStringAsync();
            }            
 
            return source;
        }
    }
Все, что находил в старом добром гугле, так же не заработало либо устарело

Подскажите, можно все таки распарсить страницу, с помощью AngleSharp, после выполнения скриптов?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2018, 14:38
Ответы с готовыми решениями:

Авторизация на AngleSharp
Не получается авторизоваться, не могу понять где ошибка? Как парсить уже полученную страницу после авторизации? Вроде бы записываю в input,...

Парсинг на AngleSharp
Здравствуйте уважаемые господа. Имеется вот такой html &quot;кодец&quot;: &lt;div id=&quot;29259&quot; class=&quot; pull-left m-5 bg-silver-lighter...

Как работает AngleSharp?
Доброго времени суток друзья! Я совсем новенький только начал изучать C# (3й день). Мне нужно понять на примере как с помощью библиотеки...

10
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
01.12.2018, 14:44
Я не лазил в доку по AngleSharp, но кажется, что этот кусок WithJavaScript().WithCss() говорит, что css и js также надо идентифицировать, но исполняться то он не будет.
Вам нужно выполнить js, чтобы сгенерировать динамические данные.
Воспользуейтесь Selenium. Из него уже вытаскивайте данные под парсинг.
1
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 22
01.12.2018, 14:53  [ТС]
Connecting JavaScript evaluation
The project also contains a sample JavaScript engine based on Jint (JavaScript Interpreter).

The sample starts by creating a customized version based on the pre-defined Configuration class. Here we just include another engine, located in AngleSharp.Scripting (namespace and project). It is important to also enable scripting. AngleSharp knows that having script engines and using them are two different things.

Here is the full sample code.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static void SimpleScriptingSample()
{
    //We require a custom configuration
    var config = Configuration.Default.WithJavaScript();
    //Let's create a new parser using this configuration
    var parser = new HtmlParser(config);
 
    //This is our sample source, we will set the title and write on the document
    var source = @"<!doctype html>
        <html>
        <head><title>Sample</title></head>
        <body>
        <script>
        document.title = 'Simple manipulation...';
        document.write('<span class=greeting>Hello World!</span>');
        </script>
        </body>";
    var document = parser.Parse(source);
 
    //Modified HTML will be output
    Console.WriteLine(document.DocumentElement.OuterHtml);
}
This code just parses the given HTML code, encounters the provided JavaScript and executes it. The JavaScript will manipulate the document at the given point, changing the title of the document and appending some more HTML to parse. In the end we will see, that the printed (serialized) HTML is different to the original one.
Это из документации на гитхабе, разве тут не говориться о том, что JS как раз таки выполняется и изменения учитываются в дальнейшем?
This code just parses the given HTML code, encounters the provided JavaScript and executes it. The JavaScript will manipulate the document at the given point, changing the title of the document and appending some more HTML to parse. In the end we will see, that the printed (serialized) HTML is different to the original one.
И если это не так, то что, на ваш взгляд, лучше использовать Selenium или WebKit.Net? Когда то давно работал с Selenium, но PhantomJS (точно название не помню, но в описании было как "невидимый браузер") так и не работал, возможно я что то не правильно делал. Все же хотелось бы скрыть данный процесс от пользователя
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
01.12.2018, 14:56
flashsleep, Страницу покажите и какие элементы вы ищите.
1
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 22
01.12.2018, 15:00  [ТС]
Страница - https://1xstavka.ru/live/Footb... sk-Akhmat/

Элементы - заголовки ставок - "Тотал, Фора и т.д."
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
01.12.2018, 15:08
flashsleep, ну ок, ну так в примере config с установкой на выполнения js-а передается в HtmlParser, а не в BrowsingContext
Цитата Сообщение от flashsleep Посмотреть сообщение
Here we just include another engine, located in AngleSharp.Scripting
Попробуйте не через BrowsingContext, а через HtmlParser, как в примере..
1
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 22
01.12.2018, 15:13  [ТС]
IamRain, Пробовал, результат тот же, в document.DocumentElement.OuterHtml так же хранится скриптом и этих элементов нет. Пробовал так эе создавать новый экземпляр config
C#
1
var config = new Configuration().WithJavaScript();
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14168 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
02.12.2018, 19:01
Лучший ответ Сообщение было отмечено flashsleep как решение

Решение

flashsleep, насколько мне известно поддержка JS в AngleSharp очень ограниченная. Автор библиотеки стремился продемонстрировать возможность выполнения JS, но полноценную реализацию не написал. Поэтому необходимо использовать какой-либо браузерный движок. Например уже упомянутый Selenium или стандартный компонент WebBrowser.
1
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 22
03.12.2018, 09:32  [ТС]
Спасибо за ответы. Если не сложно, подскажите еще 1 момент. Если покопать в сторону Jint, можно ли будет на нем выполнить скрипты с сайта и в дальнейшем получить код страницы?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14168 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
03.12.2018, 15:46
flashsleep, чтобы ответить на этот вопрос нужно именно покопать на практике и тогда станет ясно получится или нет. Перед этим советую попробовать более простой способ который используют в подобных ситуациях. Вполне вероятно что скрипт запрашивает данные с сервера. Нужно посмотреть какие http запросы выполняются во время загрузки страницы и попробовать найти там необходимые данные. Затем запрашивать из кода эту страницу и парсить данные.
1
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 22
03.12.2018, 20:45  [ТС]
OwenGlendower, Да, спасибо, подумал уже об этом, когда читал про Jint)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2018, 20:45
Помогаю со студенческими работами здесь

Парсинг таблицы AngleSharp
Всем добрый день. Подскажите как правильно(проще) парсить таблицу HTML с помощью AngleSharp? Что бы была возможность работать с данными в...

Парсинг через AngleSharp
пытаюсь обратиться к тегу div что не так? пишу недавно на C# точной информации не могу найти по библиотеки AngleSharp var...

AngleSharp имя Нода
Собственно получаю Нод, но не могу разобраться как получить его имя (Name) Добавлено через 9 минут Интересующий кусок html ...

Как парсить страницу на AngleSharp?
Мне нужно распарсить данную страницу с помощью AngleSharp. Почитав скудную документацию на гитхабе написал следующее: static...

Спарсить нужные теги (AngleSharp)?
Всем привет, использую AngleSharp библиотеку для парсинга, сам тег img легко спарсить var menuPics = document .All ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru