На 10 строке ошибка, у вас получается два корневых запроса их нельзя объединять, если вы ищите пизд*ка, через метод FindChildByXPath необходимо использовать ./ в начале запроса.Подскажите пожалуйста как правильно тут сделать. Получаю ошибку http://joxi.ru/l2ZxLedC0aqRrJ
Попробуйте так. Нашел на просторах форума.добрые люди подскажите пжл - а если контент появляется при прокрутки страницы - что нужно добавить в код?
сначало нужно полностью чтобы подгрузилась станица? как пример www_cosmo.ru/beauty/ там страниц 30-50
foreach (HtmlElement post in postCollection)
{
string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim();
string postImg1 = post.FindChildByXPath(".//div/div/img",0).GetAttribute("src").Trim();
string postLog = string.Format("{0};{1}",postTitle,postImg1);
project.SendInfoToLog(postLog, true);
ItemList.Add(postLog);
}
Так у тебя В каждом post столько картинок. Или на странице такое количество блоков post находит, где в каждом по 1 картинке?Добрый! Получаю страницу, там изображений разное количество от 1 до 20 ти - string postImg1 = post.FindChildByXPath(".//div/div/img",0).GetAttribute("src").Trim();
У меня вопрос, а как вывести весь массив с картинками? Он берет первый элемент по умолчанию я так понимаю? Или надо подсчитывать количество элементов и цикл организовывать на вывод элементов ? Или другие пути есть?Код:foreach (HtmlElement post in postCollection) { string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim(); string postImg1 = post.FindChildByXPath(".//div/div/img",0).GetAttribute("src").Trim(); string postLog = string.Format("{0};{1}",postTitle,postImg1); project.SendInfoToLog(postLog, true); ItemList.Add(postLog); }
В одном посте от 1 до 20 ти картинок, только вникаю в C#, поэтому не знаю как правильно сделать, получается надо подсчитать количество картинок и организовать внутренний цикл по условию а в конце выводить в один списокТак у тебя В каждом post столько картинок. Или на странице такое количество блоков post находит, где в каждом по 1 картинке?
Для первого варианта надо сделать поиск не первого элемента postImg1, а всей коллекции и в цикле перепарсить ее (еще один внутренний foreach).
Для второго варианта все проще. Просто в новый список надо ложить каждое найденное значение.
Уточни ситуацию и приведу код, если сам не можешь.
foreach (HtmlElement post in postCollection)
{
string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim();
HtmlElementCollection postImgAll = item.FindChildrenByXPath(".//div/div/img"); // вот и наша новая коллекция картинок
var postImgAll_src = project.Lists["postImgAll_src"]; // в пустой список проекта postImgAll_src (не забудьте создать) будут закидаться найденные значения, здесь мы его подключаем
foreach (HtmlElement Img in postImgAll) // начинаем перебор в цикле
{
string temp = Img.GetAttribute("src").Trim(); // вытягивает src
postImgAll_src.Add(temp); // кладем src в список
}
string postLog = string.Format("{0};{1}",postTitle,postImg1);
project.SendInfoToLog(postLog, true);
ItemList.Add(postLog);
}
foreach (HtmlElement post in postCollection)
{
string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim();
HtmlElementCollection postImgAll = post.FindChildrenByXPath(".//div/div/img"); // вот и наша новая коллекция картинок
var postImgAll_src = project.Lists["postImgAll_src"]; // в пустой список проекта postImgAll_src (не забудьте создать) будут закидаться найденные значения, здесь мы его подключаем
foreach (HtmlElement Img in postImgAll) // начинаем перебор в цикле
{
string temp = Img.GetAttribute("src").Trim(); // вытягивает src
postImgAll_src.Add(temp); // кладем src в список
}
string postLog = string.Format("{0};{1}",postTitle,postImgAll);
project.SendInfoToLog(postLog, true);
ItemList.Add(postLog);
}
string postLog = string.Format("{0};{1}",postTitle,postImgAll);
project.SendInfoToLog(postLog, true);
ItemList.Add(postLog);
Нужное Значение;ZennoLab.CommandCenter.HtmlElementCollection
Хз насколько я правильно понял задаачу, но вроде твои ошибки в том, что ты вне области цикла обработки тех картинок пробуешь добавить строку. И вместо значения вставляешь название коллекции. А если так:Спасибо вот код работает
Список добавил в него парсятся src картинок, а вот как положить в изначальный список?Код:foreach (HtmlElement post in postCollection) { string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim(); HtmlElementCollection postImgAll = post.FindChildrenByXPath(".//div/div/img"); // вот и наша новая коллекция картинок var postImgAll_src = project.Lists["postImgAll_src"]; // в пустой список проекта postImgAll_src (не забудьте создать) будут закидаться найденные значения, здесь мы его подключаем foreach (HtmlElement Img in postImgAll) // начинаем перебор в цикле { string temp = Img.GetAttribute("src").Trim(); // вытягивает src postImgAll_src.Add(temp); // кладем src в список } string postLog = string.Format("{0};{1}",postTitle,postImgAll); project.SendInfoToLog(postLog, true); ItemList.Add(postLog); }
Получается я вставляю как то неправильно вот так
В результате список содержитКод:string postLog = string.Format("{0};{1}",postTitle,postImgAll); project.SendInfoToLog(postLog, true); ItemList.Add(postLog);
ZennoLab.CommandCenter.HtmlElementCollection А это список с изображениями получается.Код:Нужное Значение;ZennoLab.CommandCenter.HtmlElementCollection
Т.е. строку добавить типа берем из списка, вытягиваем в строку и кладем в первоначальное значение переменной postImg1 ? Так можно как то сделать?
foreach (HtmlElement post in postCollection)
{
string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim();
HtmlElementCollection postImgAll = post.FindChildrenByXPath(".//div/div/img"); // вот и наша новая коллекция картинок
var postImgAll_src = project.Lists["postImgAll_src"]; // в пустой список проекта postImgAll_src (не забудьте создать) будут закидаться найденные значения, здесь мы его подключаем
foreach (HtmlElement Img in postImgAll) // начинаем перебор в цикле
{
string temp = Img.GetAttribute("src").Trim(); // вытягивает src
postImgAll_src.Add(temp); // кладем src в список
string postLog = string.Format("{0};{1}",postTitle,temp);
project.SendInfoToLog(postLog, true);
ItemList.Add(postLog);
}
}
Тогда так:Т.е. строку добавить типа берем из списка, вытягиваем в строку и кладем в первоначальное значение переменной postImg1 ? Так можно как то сделать?
foreach (HtmlElement post in postCollection)
{
string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim();
HtmlElementCollection postImgAll = post.FindChildrenByXPath(".//div/div/img"); // вот и наша новая коллекция картинок
var postImgAll_src = project.Lists["postImgAll_src"]; // в пустой список проекта postImgAll_src (не забудьте создать) будут закидаться найденные значения, здесь мы его подключаем
string postImg1 = "";
foreach (HtmlElement Img in postImgAll) // начинаем перебор в цикле
{
string temp = Img.GetAttribute("src").Trim(); // вытягивает src
postImgAll_src.Add(temp); // кладем src в список
postImg1 += temp + ";"; // вытягиваем в строку, то есть в каждом шаге добавляем в конец переменной "postImg1" наше новое значение через разделитель ";" (можно сменить на свои символы)
}
string postLog = string.Format("{0};{1}",postTitle,postImg1);
project.SendInfoToLog(postLog, true);
ItemList.Add(postLog);
}
Нужное Значение;img2
Нужное Значение;img3
Нужное Значение;img4
...
Нужное Значение;img1,img2,img3,img4,...;
Вот да то что надо работает! Спасибо!!!Тогда так:
Код:foreach (HtmlElement post in postCollection) { string postTitle = post.FindChildByXPath(".//a[1]",0).InnerText.Trim(); HtmlElementCollection postImgAll = post.FindChildrenByXPath(".//div/div/img"); // вот и наша новая коллекция картинок var postImgAll_src = project.Lists["postImgAll_src"]; // в пустой список проекта postImgAll_src (не забудьте создать) будут закидаться найденные значения, здесь мы его подключаем string postImg1 = ""; foreach (HtmlElement Img in postImgAll) // начинаем перебор в цикле { string temp = Img.GetAttribute("src").Trim(); // вытягивает src postImgAll_src.Add(temp); // кладем src в список postImg1 += temp + ";"; // вытягиваем в строку, то есть в каждом шаге добавляем в конец переменной "postImg1" наше новое значение через разделитель ";" (можно сменить на свои символы) } string postLog = string.Format("{0};{1}",postTitle,postImg1); project.SendInfoToLog(postLog, true); ItemList.Add(postLog); }
//iframe[@class='ag-popup__frame__layout__iframe']
//iframe[@class='ag-popup__frame__layout__iframe']//input[contains(@name,'Username')]
("//div[@class='A' and not fig_\w\w\w\w]()")
Чем отличается XPath от конструктора действий. Теперь скажите почему проще не воспользоваться конструктором действий? Он как мне кажется выполняет все те-же действия...
Спасибо. Почему же разработчики, решили его не внедрят, как утилиту к зенке, загадка, для меня.Конечно, проще пользоваться конструктором, но при работе с нестандартной разметкой или сайтами, которые регулярно ее обновляют, вы столкнетесь со сложностью в поддержке и отладке ваших шаблонов. xPath более универсальный и лаконичнее.
как пример, доработаете под себяСтолкнулся с двумя проблемами. xPath не хочет работать с тэгом SVG. И как в один xPath запихать два одинаково необходимых условия?