ссылки в список xpath

glinko

Client
Регистрация
18.11.2015
Сообщения
4
Благодарностей
4
Баллы
3
Приветствую.
Не силен в xpath. Подскажите, как вытянуть ссылки <а href со всей страницы (включая рекламные блоки)?

Делал по примеру отсюда: http://zennolab.com/discussion/threads/xpath-universalnyj-c-shag-raboty-s-ehlementami.20830/#post-141316
пытаюсь забирать кодом:
Код:
var links = project.Lists["Links"];
string xpath_exp = ".//a";
var action_ev = "get|href";
var set_action ="";
var linksCollectionLength = CommonCode.FindElementsByXpath(instance, xpath_exp);
for (int i = 1; i < linksCollectionLength.Length; i++)
{
    xpath_exp = ".//a[" + i.ToString() + "]";
var linksCollection = CommonCode.FindElementAndExecuteAction(instance, xpath_exp, action_ev, set_action);
links.Add(linksCollection);
}
Например для яндекса.ру в список дает семь ссылок, хотя linksCollectionLength получает 123 ссылки...
 

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Такие вещи проще по топорному сделать:
C#:
Tab tab = instance.MainTab;
if (tab.IsBusy) tab.WaitDownloading();
// get document
Document doc = tab.MainDocument;

// find element by attribute
HtmlElementCollection heCol = doc.FindElementsByXPath(@"//a");

var data = heCol.AttributesToString("href").Split(new string[] {Environment.NewLine},0).ToList();

project.Lists["Links"].AddRange(data);
 
  • Спасибо
Реакции: glinko

glinko

Client
Регистрация
18.11.2015
Сообщения
4
Благодарностей
4
Баллы
3
спасибо! то что надо!
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 702
Благодарностей
1 078
Баллы
113
Дабы не плодить темы, спрошу здесь.
В коде выше, строка
string xpath_exp = ".//a";
Проблема в том, что она находит как http:\\, , tel: так и mailto:
Как сделать так, что бы находило только http:\\ , https:\\ ?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Дабы не плодить темы, спрошу здесь.
В коде выше, строка
string xpath_exp = ".//a";
Проблема в том, что она находит как http:\\, , tel: так и mailto:
Как сделать так, что бы находило только http:\\ , https:\\ ?
xPath:
C#:
.//a[not(contains(@href,'tel:')) and not(contains(@href,'mailto:'))]
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 702
Благодарностей
1 078
Баллы
113
Спасибо тебе добрый человек. буду щас тестить!
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 923
Благодарностей
1 123
Баллы
113
Отлично по аналогии спаршу картинки
 

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