Сниппет не возвращает все посты (не могу отловить ошибку)

  • Автор темы Автор темы yarchino
  • Дата начала Дата начала

yarchino

Client
Регистрация
05.06.2016
Сообщения
170
Реакции
31
Баллы
28
Нашел код на просторах интернета немного переделал под себя. Весь код состоит с нескольких частей, где то в этой есть ошибка не могу отловить. По возможности записаны комментарии. Скрипт должен на страницы вконтакте показать количество постов отвечающих требованиям. Но постоянно показывает 0. Буду очень благодарен за любые советы.
Код:
Развернуть Свернуть Копировать
var goodElements = new List<HtmlElement>();

//собираем коллекцию всех постов
var postsCollection = instance.ActiveTab.FindElementsByAttribute("div","onclick","wall.postClick","regexp");

//проходим по каждому элементу коллекции
for (int i = 0; i < postsCollection.Count; i++)
{
    // находим ребенка , тег Div с класом wall_text
    var wallText = postsCollection.GetByNumber(i).FindChildByAttribute("div","class","wall_text","regexp",0);
    //Получаем innerhtml найденого элемента
    var innerhtml = wallText.GetAttribute("innerhtml");
        //Если из слов в скобкахесть в inerhtml прерываем цыкл и берем новый элемент
    if (innerhtml.Contains("wall_audio_rows") || innerhtml.Contains("wall.pollVote") || innerhtml.Contains("Page.showGif") )
   
    {
        continue;
    }
   
    // находин div с текстом нашего поста
    var wallPostText = postsCollection.GetByNumber(i).FindChildByAttribute("div", "class", "wall_text", "regexp", 0);
   
    //Обьявляем переменую haslinks где будет содержаться информация есть ли внешние ссылки в посте
    var hasLinks = false;
    //собираем все сылки нашего поста
    var links = wallPostText.FindChildrenByTags("a");
    //проходимся по всем сылкам
    for (int j = 0; j < links.Count ; j ++)
    {
        //Берем атрибут href
        var linkHref = links.GetByNumber(j).GetAttribute("href");
        //Если в текущем значении href есть что-то кроме хештега
        if (!linkHref.Contains("/feed?"))
        {
            hasLinks = true;
            break;
        }   
    }
    if (hasLinks)
    {
        continue;
    }
   
    goodElements.Add(postsCollection.GetByNumber(i));
}
return goodElements.Count;
 
Ну вот тебе любой совет. Освой xpath.
 
Да, неправильно понял. Xpath имеет прямое отношение к си решеточка.
 
Еще поделил код на несколько частей первая часть всьо отрабатывает. Берет innerhtml. Значит ошыбка где то в фильтре по постам или в скрипте.
var goodElements = new List<HtmlElement>();

//собираем коллекцию всех постов
var postsCollection = instance.ActiveTab.FindElementsByAttribute("div","onclick","wall.postClick","regexp");

//проходим по каждому элементу коллекции
for (int i = 0; i < postsCollection.Count; i++)
{
// находим ребенка , тег Div с класом wall_text
var wallText = postsCollection.GetByNumber(i).FindChildByAttribute("div","class","wall_text","regexp",0);
return wallText.GetAttribute("innerhtml");
}
 
Да, неправильно понял. Xpath имеет прямое отношение к си решеточка.
Было временя немножко разобрался с Xpath — это язык запросов к элементам xml или xhtml документа, также как SQL. И мою проблему можно решить с помощью нево, только зачем заново изобретать велосипед. Если и этот код должен работать (проблема либо в ошибке коде либо вконтакте поменяли алгоритм).
 
Было временя немножко разобрался с Xpath — это язык запросов к элементам xml или xhtml документа, также как SQL. И мою проблему можно решить с помощью нево, только зачем заново изобретать велосипед. Если и этот код должен работать (проблема либо в ошибке коде либо вконтакте поменяли алгоритм).
ну так поправь код если там ошибка и ты догадался, что мешает
 

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