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

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 920
Благодарностей
4 278
Баллы
113
Очень жду новую фичу по 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

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 920
Благодарностей
4 278
Баллы
113
Спасибо! Я обычно работаю с Хромом и там пересмотрел все плагины работающие с xPath. Все шлак.
А для Лисы даже и искать не стал, но этот отлично подошел.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 920
Благодарностей
4 278
Баллы
113
Ещё раз спасибо 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.
И вот теперь думаю - а если они верстку поменяют? И ведь не редкость.
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 310
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

так в хроме, в сорсе кода, в меню копи есть возможность взять XPath без всяких плагинов
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 920
Благодарностей
4 278
Баллы
113
Да, можно, но нельзя указывать парента, а он по умолчанию что угодно предлагает.
 

IgorSush

Client
Регистрация
11.02.2016
Сообщения
312
Благодарностей
108
Баллы
43
Добрый день!

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

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

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

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

Поможите, люди добрые:-)
 

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
553
Баллы
93
Добрый день!

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

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

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

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

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

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Добрый день!

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

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

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

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

Поможите, люди добрые:-)
(//div[@class='wrap'])[2]
 
  • Спасибо
Реакции: IgorSush

IgorSush

Client
Регистрация
11.02.2016
Сообщения
312
Благодарностей
108
Баллы
43
Так с чем помочь? вариант .//div[@class='wrap'][2] без пациента обсуждать не имеет смысла.
К то муже эта тема "полезные статьи от пользователей " Для вопросов желательно выбирать вопросы
В этой теме кучкуются спецы по теме Xpath, так уж получилось. И спецов немного. Тема довольно новая и неосвещенная, вопросы возникают часто. Не захламлять же общие "Вопросы" каждый раз новым топиком.
ИМХО Xpath достоен отдельной ветки.
 

Aviatikor

Client
Регистрация
30.01.2016
Сообщения
91
Благодарностей
30
Баллы
18
Почему то у меня значения устанавливаются в одно и тоже поле, логин, пароль, пароль, все три сниппета и все в одно поле, хотя XPath подбирал поля через FirePath в Firebug, выражения уникальные, так почему же в одну строчку пытается запихнуть значения сниппеты? Есть ли какое нибудь решение?
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Почему то у меня значения устанавливаются в одно и тоже поле, логин, пароль, пароль, все три сниппета и все в одно поле, хотя XPath подбирал поля через FirePath в Firebug, выражения уникальные, так почему же в одну строчку пытается запихнуть значения сниппеты? Есть ли какое нибудь решение?
а без xpath эти поля поймать нельзя?
 

Aviatikor

Client
Регистрация
30.01.2016
Сообщения
91
Благодарностей
30
Баллы
18
а без xpath эти поля поймать нельзя?
Уже сделал без xpath, правда экшенов больше задействовал, хотелось бы пропроще, но да ладно, справился. Там просто было поле с уникальным name и причём ещё их четыре одинаковых поля[под каждое значение(4 для логина и т.п.)], три из них в style="display:none", и при повторном заходе на страницу для реги (меняется name) и стиль display:none рандомно скрывает три из четырёх полей, получается одно поле каждый раз при новой реги нужно ловить из этих четырёх полей. Короче уже запилил шаблон, просто не нравится мне куча экшенов, которая занимает место, сейчас активно изучаю C#, вот и стараюсь обходиться в основном кодом, а XPATH попробывал для общего развития, ну неполучилось, значит не время))
 

IgorSush

Client
Регистрация
11.02.2016
Сообщения
312
Благодарностей
108
Баллы
43
//*[@name='login' and not(contains(@style,'display:none'))]
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 075
Благодарностей
125
Баллы
63
учусь находить в 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, чтобы взять этот заголовок в переменную?
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
учусь находить в 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

markzmanz

Client
Регистрация
22.05.2015
Сообщения
63
Благодарностей
4
Баллы
8
Что-то лыжи не едут..

Вот если взять пример из проекта по странице 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);

Выдает ошибку комплиляции
 

222volt

Client
Регистрация
26.07.2012
Сообщения
15
Благодарностей
1
Баллы
3
Может было у кого, добавил С# с поиском xPath пару раз нашел, а потом постоянно "Действие не выполнено" причем даже на элементарных событиях, типа взять строку из списка, перейти по УРЛ и т.п.
 
  • Спасибо
Реакции: cheli.dlfn

Seobes

Client
Регистрация
05.09.2015
Сообщения
11
Благодарностей
9
Баллы
3
А как можно осуществлять поиск не из активной вкладки, а например из переменной?
 
  • Спасибо
Реакции: bhairava7 и zennoX

bhairava7

Client
Регистрация
18.08.2015
Сообщения
154
Благодарностей
15
Баллы
18
Поддержу вопрос Seobes. Было бы хорошо иметь возможно работать с xpath через GET/POST запросы без установки HTML в браузер, а напрямую из переменной.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
Поддержу вопрос Seobes. Было бы хорошо иметь возможно работать с xpath через GET/POST запросы без установки HTML в браузер, а напрямую из переменной.
https://skladchik.com/threads/zennopro-academy-c-zenoposter-с-нуля-до-профи-Неограниченный-доступ-к-доработкам-курса.125151/
он знает как сделать уже сейчас двумя строчками C# без подключения лишних библиотек типа HtmlAgility
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
https://skladchik.com/threads/zennopro-academy-c-zenoposter-с-нуля-до-профи-Неограниченный-доступ-к-доработкам-курса.125151/
он знает как сделать уже сейчас двумя строчками C# без подключения лишних библиотек типа HtmlAgility
Скажу тебе по секрету, что IndexOf с отключением поиска при помощи регистра работает быстрее любого XPath. Единственной пользой от XPath можно считать только огромный структурированный поиск в определенных блоках различных параметров для удобства парсинга. Во всех же остальных случаях XPath работает заметно медленнее и жрет больше ресурсов.
 
  • Спасибо
Реакции: AZANIR

stud

Client
Регистрация
23.06.2013
Сообщения
88
Благодарностей
136
Баллы
33
он знает как сделать уже сейчас двумя строчками C# без подключения лишних библиотек типа HtmlAgility
можно поконкретнее?
как раз он советует использовать HtmlAgility
 

rediffusion

Client
Регистрация
02.04.2016
Сообщения
28
Благодарностей
1
Баллы
8
Для хрома используйте плагин вот этот.
 
  • Спасибо
Реакции: Sanekk

sergboss

Client
Регистрация
19.09.2016
Сообщения
53
Благодарностей
3
Баллы
8
через гет запрос получаю html код в переменную
как искать xpath в коде переменной ??
спасибо
 

sergboss

Client
Регистрация
19.09.2016
Сообщения
53
Благодарностей
3
Баллы
8
Ты можешь полученный html из get установить в активную вкладку, и дальше работать как обычно
Код:
var x = project.Variables["res"].Value; // переменная x с html кодом после гет запроса
instance.ActiveTab.MainDocument.Body.SetAttribute("innerHtml", x);
Использовал в своём примере, у меня выдаёт ошибку
Выполнение действия CSharp OwnCode элемент не найден

как правильно прописать instance чтоб искалась информация из переменной
 

nik-n

Client
Регистрация
05.11.2016
Сообщения
226
Благодарностей
18
Баллы
18
такой трабл:
есть таблица, и куча кубиков которые бегут в строке по ячейкам и берут 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);
мастера великие, подскажите пожалуйста, что нужно где то дописать? ))
 

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