Как спарсить ссылку, если у кнопки нет Href - С#

idleSSS

Новичок
Регистрация
12.02.2019
Сообщения
28
Благодарностей
3
Баллы
3
Всем привет!

Делаю парсер через foreach с использованием Xpath.
При переборе всех строк в таблице и нахождении нужного слова, мне нужно спарсить ссылку с подходящей строки. Но у кнопки нет ссылки (нет href), при наведении на неё отображается общая ссылка для всех кнопок. Как мне быть в этой ситуации?
При взятии "DOM" все ссылки из всех строк отображаются (в общем коде страницы их нет). Но как мне это поможет я не знаю.
Допустим я беру DOM - var dom = instance.ActiveTab.DomText;
Но мне нужны ссылки только тех строк, где есть нужное слово. Как мне это реализовать?
Регулярка для всех ссылок есть.
Могу сделать через FindElementsByAttribute вместо FindElementsByXPath, если будет подсказка.

Код:
(SyncObjects.ListSyncer) {
var ids_parsedList    = project.Lists["ids_parsed"];
var urls            = project.Lists["urls"];
Tab Tab1 = instance.ActiveTab;
//получаем все строки из таблицы с сайта
HtmlElementCollection colRows = Tab1.FindElementsByXPath("//table[@class='es-reestr-tbl its']");
//перебираем каждую строку
foreach(HtmlElement elRow in colRows){
    //получаем данные нужного элемента конкретной строки
    string strCellOne = elRow.FindChildByXPath(".//span[@class='es-el-name']", 0).GetAttribute("innerHtml");
    if ((strCellOne.Contains("нужное слово") || strCellOne.Contains("нужное слово 2")) && (strCellOne.Contains("нужное слово 3") || strCellOne.Contains("нужное слово 4"))) {
        //забираем данные из второй ячейки и по аналогии из остальных ячеек этой строки
// ВОТ У ЭТОГО ЭЛЕМЕНТА НЕТ ССЫЛКИ
string strCellTwo = elRow.FindChildByXPath("./div[@class='element-in-one-row']/a", 0).GetAttribute("href");

string strCellThree = elRow.FindChildByXPath(".//span[@class='es-el-code-term']", 0).GetAttribute("innerHtml");

        //записываем данные в список
        urls.Add(strCellTwo);
//        ids_parsedList.Add(strCellThree);
    }
}
}
 
Последнее редактирование:

intagens

Client
Регистрация
28.09.2015
Сообщения
209
Благодарностей
31
Баллы
28
а ссылка на страницу секретный секрет?)) если не очень секретный, то лучше сюда кинуть - быстрее помогут ... ну или в личку
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
кнопка либо передаст гет/пост с опред параметрами и будет переадресация на нужную страницу в зависимости от параметров в запросе, либо клик по кнопке отработает жс, тогда есть шанс, что в самом жс записана ссылка
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
можно ещё посмотреть - какая ссылка по итогу должна быть, возможно можно спарсить параметры на странице где кнопка - и потом генерить такие ссылки - подставляя в шаблон требуемой ссылки
 

idleSSS

Новичок
Регистрация
12.02.2019
Сообщения
28
Благодарностей
3
Баллы
3
Всем спасибо! Ссылку нашел, была очень хорошо спрятана в коде, далеко от кнопки.
Теперь другой вопрос.
Мне необходимо отправить почтой полученные данные.
Я нахожу строку в таблице где присутствует "НУЖНОЕ СЛОВО", далее получаю значения из других ячеек этой строки.
Как записать полученные значения нескольких ячеек из каждой отдельной строки таблицы на сайте, в одну строку списка??? И потом, отправить (записать) эти значения,чтобы каждое из них начиналось с новой строки.

Конечно я могу записать данные в таблицу - tblMyData.AddRow(new String[]{strCellOne, strCellTwo, strCellFour});

Но я не знаю как мне сформировать письмо, чтобы эти значения не записывались в строку, а выглядели в письме так:

первая строка
Значение 1 - strCellOne
Значение 2 - strCellTwo
Значение 3 - strCellFour ит.д.
----------------------------------------------- (разделитель)
вторая строка
Значение 1 - strCellOne
Значение 2 - strCellTwo
Значение 3 - strCellFour ит.д.
---------------------------------------------------- и т.д.


Код:
//ЧАСТЬ КОДА, ДЛЯ ОТПРАВКИ ПОЧТОЙ ПРИ РАБОТЕ СО СПИСКОМ

for(int j=0; j < urls.Count; j++)
            {
                var url= urls[j];
                if(url.Contains(newID)) mailBody = mailBody + url + Environment.NewLine; // Тут идет сравнение,
если переменная url ( или tblMyData если это таблица) содержит значение другой переменной, то формируется тело письма.
Здесь я получу тело письма со всеми строками из списка
url или таблицы tblMyData , но значения каждой строки будут записаны вместе, не так как мне нужно.
                sendMail = true;
            }
        }
    
        if(sendMail) project.Variables["mailBody"].Value = mailBody;
 
Последнее редактирование:

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