получение значения атрибута в переменную и запись в список

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

vikas2006

Client
Регистрация
10.05.2019
Сообщения
62
Реакции
1
Баллы
8
Изначальная цель найти все на странице ссылки подходящие под условие и добавлять их в список. Все ссылки находятся в артрибуте href


Помогите разобраться с кодом знания пока еще слабые и не могу понять что дальше сделать.
Вот мой код текущий
int i=0; для цикла
link1;
var collection = instance.ActiveTab.FindElementsByAttribute ("a", "href", "https://www.sdfprofile.php", "regexp",i);
return collection.GetAttribute("href"); // этом варианте работает
но мне надо положить его в список
var list = project.Lists["list"];
list.Add(sd); // но эта строка не работает разные типы
i=i+1
if условие при наличии =="" выход из перебора
goto link1;
---------------

подскажите как сделать так что бы я занес в список значение полученное из collection.GetAttribute("href");; желательно через переменую что бы в условии ее сравнить.

-------------------переделал---------------------
все нашел много ошибок но все равно не работает ((


var list = project.Lists["list"];

int i=0;
link1:
HtmlElement test= instance.ActiveTab.Find.ElementByAttribute ("a", "href", "https://www.sdfprofile.php", "regexp",i);
// а тут уже делаем что хотим с этим элементом, например вернём значение href
string sd= test.GetAttribute("href");
if (sd=="") goto link2;
i=i+1;
goto link1;
link2:
list.Add(sd);
return true;
и
 
Последнее редактирование:
Привет. Постараюсь помочь. Напиши условие какие именно ссылки нужны (с чего начинаются или что там... они всегда в <A href= в любом случае). И если можешь скинь страницу, так проще будет.

Сначала надо правильно разобраться как выбирать данные, всегда ли они в одном месте и так далее.
 
Последнее редактирование:
  • Спасибо
Реакции: vikas2006
Изначальная цель найти все на странице ссылки подходящие под условие и добавлять их в список. Все ссылки находятся в артрибуте href


Помогите разобраться с кодом знания пока еще слабые и не могу понять что дальше сделать.
Вот мой код текущий
int i=0; для цикла
link1;
var collection = instance.ActiveTab.FindElementsByAttribute ("a", "href", "https://www.sdfprofile.php", "regexp",i);
return collection.GetAttribute("href"); // этом варианте работает
но мне надо положить его в список
var list = project.Lists["list"];
list.Add(sd); // но эта строка не работает разные типы
i=i+1
if условие при наличии =="" выход из перебора
goto link1;
---------------

подскажите как сделать так что бы я занес в список значение полученное из collection.GetAttribute("href");; желательно через переменую что бы в условии ее сравнить.

-------------------переделал---------------------
все нашел много ошибок но все равно не работает ((


var list = project.Lists["list"];

int i=0;
link1:
HtmlElement test= instance.ActiveTab.Find.ElementByAttribute ("a", "href", "https://www.sdfprofile.php", "regexp",i);
// а тут уже делаем что хотим с этим элементом, например вернём значение href
string sd= test.GetAttribute("href");
if (sd=="") goto link2;
i=i+1;
goto link1;
link2:
list.Add(sd);
return true;
и
Примерно так можно выправить твой код:

C#:
Развернуть Свернуть Копировать
var list = project.Lists["list"];
HtmlElementCollection test= instance.ActiveTab.FindElementsByAttribute ("a", "href", "https://www.sdfprofile.php", "regexp");

foreach(var he in test)
{
    string sd= he.GetAttribute("href");
    if (sd=="")
    {
        //Что-до делаем
    }
    else
    {
        //Что-до делаем
    }
}
 
  • Спасибо
Реакции: vikas2006
А ещё можно вот так:

C#:
Развернуть Свернуть Копировать
var test = instance.ActiveTab.DomText;
var regex = @"a\ href=""https://www.sdfprofile.php.*";
project.Lists["Имя листа"].AddRange(Regex.Matches(test,regex).Cast<Match>().Select(m=>m.Value));

 

Вложения

  • 2019-09-18_15-00-18.png
    2019-09-18_15-00-18.png
    78,4 KB · Просмотры: 316
если не нужен префикс a href=" - просто нужно переделать регулярку правильно и всё получится :-)
 
  • Спасибо
Реакции: vikas2006
В моем случае это будет
C#:
Развернуть Свернуть Копировать
(?<=a\ href=")https://zenno.*?"
А в твоём
C#:
Развернуть Свернуть Копировать
(?<=a\ href=")https://www.sdfprofile.php.*?"
До конца конечно не уверен, но вроде всё правильно сделал ))) проверяй.

P.S. Почему никто не смотрит мои ответы xD
 
  • Спасибо
Реакции: vikas2006
TwistDanceR этот вариант не отрабатывает. Наверное я не совсем точно описал что именно я хотел. Я сделал скрин свойства на примере фейсбука .
А на счет того что я не читал ответы, это да на свадьбе я был.)) прошу уж простить.


var test = instance.ActiveTab.DomText;
var regex = @"a\ href=""https://www.sdfprofile.php.*";
project.Lists["Имя листа"].AddRange(Regex.Matches(test,regex).Cast<Match>().Select(m=>m.Value));


42320
 
TwistDanceR этот вариант не отрабатывает. Наверное я не совсем точно описал что именно я хотел. Я сделал скрин свойства на примере фейсбука .
А на счет того что я не читал ответы, это да на свадьбе я был.)) прошу уж простить.

Может и не дописали... А вариант Metrix'a не пробовали? Я буду на работе чуть позже. И адрес на эту страничку скиньте, пожалуйста, где у вас этот href.
 
  • Спасибо
Реакции: vikas2006
Metrix.
Твой вариант работает находит 400 ссылок. Это значит 400 профилей.

спасибо большое кстати цикл мне понравился как сделан.
а то я его вообще топорно накидал в своем варианте.
 
Последнее редактирование:
  • Спасибо
Реакции: Metrix
Может и не дописали... А вариант Metrix'a не пробовали? Я буду на работе чуть позже. И адрес на эту страничку скиньте, пожалуйста, где у вас этот href.
это страница фейбука.

мне бы хотелось и твой вариант разобрать до логического завершения. Потому я не совсем понял почему он не отрабатывает и выбtрет ли он всех в список или одного. Я пока слаб еще в С# и потому может и не правильно описываю что надо мне.
 
Последнее редактирование:
мне бы хотелось и твой вариант разобрать до логического завершения. Потому я не совсем понял почему он не отрабатывает и выбtрет ли он всех в список или одного. Я пока слаб еще в С# и потому может и не правильно описываю что надо мне.

У меня та же цель + разобрать код Метрикса)) Буду через минут 40 пробовать.
 
что ничего не работает))

Вот, смотри.
C#:
Развернуть Свернуть Копировать
var test = instance.ActiveTab.DomText;
var regex = @"\ href=""https://www\.facebook\.com/.*?hc_location=group";
project.Lists["Список 1"].AddRange(Regex.Matches(test,regex).Cast<Match>().Select(m=>m.Value));

Я несколько раз прокрутил страницу, чтобы было побольше результатов...

Есть один нюанс: Парсится весь DOM, и влезают результаты лишние - ссылки на одменов группы и ещё 1 какой-то большой, я не стал разбираться.
Но можно парсить определенный элемент а не весь DOM. (например все ссылки только из раздела "New to the group" - Нужно подменить var test на нужный элемент (например как раньше было - через поиск элемента по ID). Т.о. левые ненужные результаты к нам в лист не попадут.

P.S. или подобрать более точную регулярку избавив нас от ненужных айтемов.
2019-09-19_11-13-34.png
 
Вот, смотри.
C#:
Развернуть Свернуть Копировать
var test = instance.ActiveTab.DomText;
var regex = @"\ href=""https://www\.facebook\.com/.*?hc_location=group";
project.Lists["Список 1"].AddRange(Regex.Matches(test,regex).Cast<Match>().Select(m=>m.Value));

Я несколько раз прокрутил страницу, чтобы было побольше результатов...

Есть один нюанс: Парсится весь DOM, и влезают результаты лишние - ссылки на одменов группы и ещё 1 какой-то большой, я не стал разбираться.
Но можно парсить определенный элемент а не весь DOM. (например все ссылки только из раздела "New to the group" - Нужно подменить var test на нужный элемент (например как раньше было - через поиск элемента по ID). Т.о. левые ненужные результаты к нам в лист не попадут.

P.S. или подобрать более точную регулярку избавив нас от ненужных айтемов.
Посмотреть вложение 42324
тоже вариант получился не плохой. Спаб.
 
Честно говоря, Я бы вообще сделал лучше поиск нужных элементов через XPath, собрал бы их в коллекцию, также как и по атрибутам, а потом бы дёргал оттуда ссылки. Скорее всего путь там будет непростой, потому как много рандомных значений, но всё равно можно найти к чему зацепиться. Ну или также регулярками собирать все ссылки на профиля, чистить от дублей.
 
  • Спасибо
Реакции: vikas2006

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