Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Облазил довольно много форумов но вот что-то не нашел, как мне использовать
прекраснейший xpath без загрузки страницы или DOM, а из чистого html который находится в переменной.
Ну вот пример: сделал я GET запрос на http://lessons.zennolab.com/captchas/
результат попал в переменную и вот как теперь обратиться к этой переменной через xpath и что-то от туда вытащить.
Во всех примерах только требуется instance.ActiveTab.FindElementByXPath но это не то.
// переменная x с html кодом после гет запроса
var x = project.Variables["dom"].Value;
instance.ActiveTab.MainDocument.Body.SetAttribute("innerHtml", x);
Облазил довольно много форумов но вот что-то не нашел, как мне использовать
прекраснейший xpath без загрузки страницы или DOM, а из чистого html который находится в переменной.
Ну вот пример: сделал я GET запрос на http://lessons.zennolab.com/captchas/
результат попал в переменную и вот как теперь обратиться к этой переменной через xpath и что-то от туда вытащить.
Во всех примерах только требуется instance.ActiveTab.FindElementByXPath но это не то.
Берем код html который находится в переменной допустим х,
устанавливаем его в активную вкладку - instance.ActiveTab.MainDocument.Body.SetAttribute("innerHtml", x);
Дальше работаем как с обычной страницей через методы instance.ActiveTab.FindElementByXPath
получить значение из атрибута value это значить получить все что находится внутри
Вот что надо получить, что находиться в кавычках, при условии что тег input имеет name="c1" который меняется
запросов к сайту нет, вот только для работы с инстансом, если я не ошибаюсь, должен быть включён браузер. А скорость работы и ресурсозатраты браузерного и безбраузерного проекта очень сильно отличаются
Вообще, Я немного отстал от обнов, но кажется в какой-то из версий вшивали библиотеку хтмл агилити пак
запросов к сайту нет, вот только для работы с инстансом, если я не ошибаюсь, должен быть включён браузер. А скорость работы и ресурсозатраты браузерного и безбраузерного проекта очень сильно отличаются
вот именно что ресурсы поджирать будет, я и хотел в будущем использовать чистый html +xpath может не много regex
по поводу либы пацаны пишут что она уже давно в off ушла в плане разработки баги многолетней давности не фиксять и бывает так что сыплется
Изучал чистый xpath (HtmlAgilityPack, без использования браузера для POST\GET запросов) последний месяц под свои нужды. Очень часто в новичков на форуме проблемы с его подключением. Так что вот пример шаблона с подключенными библиотеками, СКАЧАТЬ ПРИМЕР.
Основной код из шаблона:
C#:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); // создание объекта
var template_html = project.Variables["Htnl_Code"].Value; // грузим наш код
// условие xpath, если надо найти все элементы с value, где тег input имеет name='c1':
var var_xpath1 = @"//*[@value and @name='c1']";
// или условие xpath, если надо найти просто все элементы с value:
// var var_xpath1 = @"//*[@value]";
string temp = "";
string result = "";
doc.LoadHtml(template_html); // грузим DOM текст (из переменной template_html) в объект doc
// получаем список, с которым будем работать (в шаблоне должен уже быть пустой список List1_Urls)
var sourceList = project.Lists["List1_Urls"];
var Nodes_list_1 = doc.DocumentNode.SelectNodes(var_xpath1); // получаем список элементов по условию var_xpath1
if (Nodes_list_1 != null) // обязательно надо делать проверку "не пустой ли результат"
{
foreach (var res in Nodes_list_1) // начинаем цикл
{
temp = res.GetAttributeValue("value", ""); // получаем значение value каждого элемента
result += temp + "\r\n"; // добавляем его в переменную, каждое значение с новой строки
sourceList.Add(temp); // и добавляем его в список (кому как удобнее)
}
}
return result;
Шаблон работает с использованием Html Agility Pack (.NET парсер HTML).
Поэтому для его работы надо закинуть содержимое папки "ExternalAssemblies" в аналогическую папку ZennoPoster, пример у меня:
c:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.11.5.0\Progs\ExternalAssemblies\
Ети файлы я тестировал на своем «Windows 10». Они взяты из файла «HtmlAgilityPack.1.5.1\lib\Net45\» (под .NET Framework 4.5). Все актуальные версии файлов можно посмотреть на сайте разработчиков: https://www.nuget.org/packages/HtmlAgilityPack/1.5.1 . Они там правда распаковываются через их консольную утилиту.
Если с этими файлами шаблон не запускается без ошибок, значит чего-то не хватает, и надо разбираться.
Помогите плз с htmlagility, сейчас голова взорвётся
Есть тело поста с вложенным в него репостом, но оба имеют одинаковый div с class="story_body"
Необходимо выбрать узел минуя вложенный div[@class=\"story_body\"], то есть выбрать сам головной пост без вложенного репоста чтоб в результате в переменной было то что зеленым выделено на скрине (см. внутри архива).
Можно сделать вот так. Т.е. будет браться только верхний узел post_body.
Но выбрать только верхний узел post_body, чтобы не брался внутренний, так не получится. Т.к. при выборе узла, берется все что внутри него.
Если нужен именно верхний узел, и надо чтобы внутреннего не было, то тут тогда только один вариант, берется весь узел, а потом внутри него удаляется post_body.
Понял, спасибо. Ещё я поковырялся и думаю пилить логику от присутствия/отсутствия репоста
"//div[@class=\"story_body\"]/descendant::div[@class=\"story_body\"]"
Изучал чистый xpath (HtmlAgilityPack, без использования браузера для POST\GET запросов) последний месяц под свои нужды. Очень часто в новичков на форуме проблемы с его подключением. Так что вот пример шаблона с подключенными библиотеками, СКАЧАТЬ ПРИМЕР.
Основной код из шаблона:
C#:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); // создание объекта
var template_html = project.Variables["Htnl_Code"].Value; // грузим наш код
// условие xpath, если надо найти все элементы с value, где тег input имеет name='c1':
var var_xpath1 = @"//*[@value and @name='c1']";
// или условие xpath, если надо найти просто все элементы с value:
// var var_xpath1 = @"//*[@value]";
string temp = "";
string result = "";
doc.LoadHtml(template_html); // грузим DOM текст (из переменной template_html) в объект doc
// получаем список, с которым будем работать (в шаблоне должен уже быть пустой список List1_Urls)
var sourceList = project.Lists["List1_Urls"];
var Nodes_list_1 = doc.DocumentNode.SelectNodes(var_xpath1); // получаем список элементов по условию var_xpath1
if (Nodes_list_1 != null) // обязательно надо делать проверку "не пустой ли результат"
{
foreach (var res in Nodes_list_1) // начинаем цикл
{
temp = res.GetAttributeValue("value", ""); // получаем значение value каждого элемента
result += temp + "\r\n"; // добавляем его в переменную, каждое значение с новой строки
sourceList.Add(temp); // и добавляем его в список (кому как удобнее)
}
}
return result;
Шаблон работает с использованием Html Agility Pack (.NET парсер HTML).
Поэтому для его работы надо закинуть содержимое папки "ExternalAssemblies" в аналогическую папку ZennoPoster, пример у меня:
c:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.11.5.0\Progs\ExternalAssemblies\
Ети файлы я тестировал на своем «Windows 10». Они взяты из файла «HtmlAgilityPack.1.5.1\lib\Net45\» (под .NET Framework 4.5). Все актуальные версии файлов можно посмотреть на сайте разработчиков: https://www.nuget.org/packages/HtmlAgilityPack/1.5.1 . Они там правда распаковываются через их консольную утилиту.
Если с этими файлами шаблон не запускается без ошибок, значит чего-то не хватает, и надо разбираться.