XPath универсальный C# шаг работы с элементами

Очень жду новую фичу по xPath по расшифровке всех этих ветвлений в DIV - это будет просто мега бомба.
Вот с утра сижу и никак не получается вытащить данные из ФБ.
Нужно найти DIV с id=recent (1), в нем две дочки, игнорируем первую, у второй посты и в них нужно собрать на втором уровне вложенности innerhtml (2) и src картинки (3). Как это всё организовать?
2016-02-24 16-32-01 ProjectMaker for ZennoPoster v5.9.8.0 by ZennoLab.com.png
 
  • Спасибо
Реакции: bezvozni
Спасибо! Я обычно работаю с Хромом и там пересмотрел все плагины работающие с xPath. Все шлак.
А для Лисы даже и искать не стал, но этот отлично подошел.
 
Ещё раз спасибо AZANIR за подсказку по плагину. Хотелось чтобы что-то подобное было встроено в ЗП, очень помогает разобраться во всех этих деревьях.

Например вот хочу добраться в окошке в ФБ до картинки:
Код:
Развернуть Свернуть Копировать
.//*[@id='root']/div/div[1]/div/div[1]/div[2]/div/div/div[2]/a/div/table/tbody/tr/td[1]/img
И это в мобильной версии! И подобных вариантов этого окна в зависимости от типа ссылки (картинка или подгрузка со стороннего сайта), с текстом или нет, около 6-7.
И вот теперь думаю - а если они верстку поменяют? И ведь не редкость.
 
Добрый день!

Подскажите, как мне пробежаться по всем DIVам с class='wrap'.

В документе их есть, но как по очереди к ним подобраться - не соображу.

в FirePath тоже по .//div[@class='wrap'] находятся и выделяются все нужные элементы, но когда делаю

.//div[@class='wrap'][2] и так далее - нифига не находит:(

Поможите, люди добрые:-)
 
Добрый день!

Подскажите, как мне пробежаться по всем DIVам с class='wrap'.

В документе их есть, но как по очереди к ним подобраться - не соображу.

в FirePath тоже по .//div[@class='wrap'] находятся и выделяются все нужные элементы, но когда делаю

.//div[@class='wrap'][2] и так далее - нифига не находит:(

Поможите, люди добрые:-)
Так с чем помочь? вариант .//div[@class='wrap'][2] без пациента обсуждать не имеет смысла.
К то муже эта тема "полезные статьи от пользователей " Для вопросов желательно выбирать вопросы
 
Добрый день!

Подскажите, как мне пробежаться по всем DIVам с class='wrap'.

В документе их есть, но как по очереди к ним подобраться - не соображу.

в FirePath тоже по .//div[@class='wrap'] находятся и выделяются все нужные элементы, но когда делаю

.//div[@class='wrap'][2] и так далее - нифига не находит:(

Поможите, люди добрые:-)
(//div[@class='wrap'])[2]
 
  • Спасибо
Реакции: IgorSush
Так с чем помочь? вариант .//div[@class='wrap'][2] без пациента обсуждать не имеет смысла.
К то муже эта тема "полезные статьи от пользователей " Для вопросов желательно выбирать вопросы
В этой теме кучкуются спецы по теме Xpath, так уж получилось. И спецов немного. Тема довольно новая и неосвещенная, вопросы возникают часто. Не захламлять же общие "Вопросы" каждый раз новым топиком.
ИМХО Xpath достоен отдельной ветки.
 
Почему то у меня значения устанавливаются в одно и тоже поле, логин, пароль, пароль, все три сниппета и все в одно поле, хотя XPath подбирал поля через FirePath в Firebug, выражения уникальные, так почему же в одну строчку пытается запихнуть значения сниппеты? Есть ли какое нибудь решение?
 
Почему то у меня значения устанавливаются в одно и тоже поле, логин, пароль, пароль, все три сниппета и все в одно поле, хотя XPath подбирал поля через FirePath в Firebug, выражения уникальные, так почему же в одну строчку пытается запихнуть значения сниппеты? Есть ли какое нибудь решение?
а без xpath эти поля поймать нельзя?
 
а без xpath эти поля поймать нельзя?
Уже сделал без xpath, правда экшенов больше задействовал, хотелось бы пропроще, но да ладно, справился. Там просто было поле с уникальным name и причём ещё их четыре одинаковых поля[под каждое значение(4 для логина и т.п.)], три из них в style="display:none", и при повторном заходе на страницу для реги (меняется name) и стиль display:none рандомно скрывает три из четырёх полей, получается одно поле каждый раз при новой реги нужно ловить из этих четырёх полей. Короче уже запилил шаблон, просто не нравится мне куча экшенов, которая занимает место, сейчас активно изучаю C#, вот и стараюсь обходиться в основном кодом, а XPATH попробывал для общего развития, ну неполучилось, значит не время))
 
//*[@name='login' and not(contains(@style,'display:none'))]
 
учусь находить в html.

Нужно из html взять заголовок "Now Foods":

Код:
Развернуть Свернуть Копировать
<h1 id="name" itemprop="name">Now Foods</h1>


Код:
Развернуть Свернуть Копировать
string xpath_exp = ".//h1[@itemprop='name']";
string action_ev = "get|что здесь должно быть";
return CommonCode.FindElementAndExecuteAction(instance, xpath_exp, action_ev);

Какой атрибут должен быть в get, чтобы взять этот заголовок в переменную?
 
учусь находить в html.

Нужно из html взять заголовок "Now Foods":

Код:
Развернуть Свернуть Копировать
<h1 id="name" itemprop="name">Now Foods</h1>


Код:
Развернуть Свернуть Копировать
string xpath_exp = ".//h1[@itemprop='name']";
string action_ev = "get|что здесь должно быть";
return CommonCode.FindElementAndExecuteAction(instance, xpath_exp, action_ev);

Какой атрибут должен быть в get, чтобы взять этот заголовок в переменную?
innertext
 
  • Спасибо
Реакции: bizzon
Что-то лыжи не едут..

Вот если взять пример из проекта по странице http://lessons.zennolab.com/en/index
Допустим хочу получить тег кнопки - "simple registration", устанавливаю путь, запускаю, все работает. Возвращает значение тег "а" в переменную. Да и вообще любой путь и get параметр с этой страницы нормально собирается.

string xpath_exp = "//*[@id='nav']/ul/li[3]/a";
string action_ev = "get|tagname";
string set_action ="";
return CommonCode.FindElementAndExecuteAction(instance, xpath_exp, action_ev, set_action);

Но на других сайтах что-то ничего не работает, например вот ngs.ru, хочу взять tagname у логотипа:

string xpath_exp = "//div[1]/div[4]/div[1]/div/a";
string action_ev = "get|tagname";
string set_action ="";
return CommonCode.FindElementAndExecuteAction(instance, xpath_exp, action_ev, set_action);

Выдает ошибку комплиляции
 
Может было у кого, добавил С# с поиском xPath пару раз нашел, а потом постоянно "Действие не выполнено" причем даже на элементарных событиях, типа взять строку из списка, перейти по УРЛ и т.п.
 
  • Спасибо
Реакции: cheli.dlfn
А как можно осуществлять поиск не из активной вкладки, а например из переменной?
 
  • Спасибо
Реакции: bhairava7 и zennoX
Поддержу вопрос Seobes. Было бы хорошо иметь возможно работать с xpath через GET/POST запросы без установки HTML в браузер, а напрямую из переменной.
 
Поддержу вопрос Seobes. Было бы хорошо иметь возможно работать с xpath через GET/POST запросы без установки HTML в браузер, а напрямую из переменной.
https://skladchik.com/threads/zenno...граниченный-доступ-к-доработкам-курса.125151/
он знает как сделать уже сейчас двумя строчками C# без подключения лишних библиотек типа HtmlAgility
 
https://skladchik.com/threads/zennopro-academy-c-zenoposter-с-нуля-до-профи-Неограниченный-доступ-к-доработкам-курса.125151/
он знает как сделать уже сейчас двумя строчками C# без подключения лишних библиотек типа HtmlAgility
Скажу тебе по секрету, что IndexOf с отключением поиска при помощи регистра работает быстрее любого XPath. Единственной пользой от XPath можно считать только огромный структурированный поиск в определенных блоках различных параметров для удобства парсинга. Во всех же остальных случаях XPath работает заметно медленнее и жрет больше ресурсов.
 
  • Спасибо
Реакции: AZANIR
он знает как сделать уже сейчас двумя строчками C# без подключения лишних библиотек типа HtmlAgility
можно поконкретнее?
как раз он советует использовать HtmlAgility
 
через гет запрос получаю html код в переменную
как искать xpath в коде переменной ??
спасибо
 
Ты можешь полученный html из get установить в активную вкладку, и дальше работать как обычно
Код:
Развернуть Свернуть Копировать
var x = project.Variables["res"].Value; // переменная x с html кодом после гет запроса
instance.ActiveTab.MainDocument.Body.SetAttribute("innerHtml", x);
Использовал в своём примере, у меня выдаёт ошибку
Выполнение действия CSharp OwnCode элемент не найден

как правильно прописать instance чтоб искалась информация из переменной
 
такой трабл:
есть таблица, и куча кубиков которые бегут в строке по ячейкам и берут innertext, но если ячейка пустая, то возникает ошибка и все останавливается:
Выполнение действия СSharp OwnCode Атрибут innertext пустой
Сбойное действие: m2_zhil Xpath

я знаю что есть ячейки пустые но мне в этом случае нужно возвращать пустое значение в переменную

Код:
Развернуть Свернуть Копировать
string count = project.Variables["count1_tr"].Value;

string xpath_exp = "//tr[@class='datarows'][" + count + "]/td[@id='td-x-7']";
string action_ev = "get|innerText";
string set_action ="";
return CommonCode.FindElementAndExecuteAction(instance, xpath_exp, action_ev, set_action);

мастера великие, подскажите пожалуйста, что нужно где то дописать? ))
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)