|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Webbrowser: Выбор элемента без id
Приветствую уважаемые программисты.
Есть такой сайт, который грузится в webbrouser. В нем я спокойно выбираю Категорию по id, в данном случае это Квартиры, не по value=24, а по номеру индекса в списке. В нашем случае это 6. Вот код: Код:
procedure TForm1.Button2Click(Sender: TObject); var a, cat1: variant; Win, Doc, Sel, Frm, Arr, Elem :Variant; i:Integer; begin Doc := WebBrowser1.OleObject.document; Sel := Doc.getElementById('fld_category_id'); Sel.selectedIndex := 6; Frm := Sel.parentNode; while (Frm.tagName <> 'BODY') and (Frm.tagName <> 'FORM') do Frm := Frm.parentNode; if Frm.tagName <> 'FORM' then begin ShowMessage('Элемент с ID = "' + Sel.id + '" не принадлежит ни одной форме.' + ' Отправка данных невозможна.'); Exit; end; Frm.submit; // что дальше? end; У этой Категории есть, есть дочерние Подкатегории, в случае с Квартирами, это купить, продать, снять и т.д. Вот эти подкатегории, мне никак не удается выбрать. Пробовал getElementByClassName, getElementByTagName, но дальше не знаю как ее выбрать. Мало того, дочерняя Подкатегория появляется на форме только после выбора родительской Категории, и чтобы ее активировать, мне приходится делать сабмит формы - Frm.submit, что я думаю не совсем правильно. В общем вопрос, как мне выбрать дочернюю Подкатегорию? |
#2
|
||||
|
||||
Всегда можно пройтись по коллекции элементов
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
А вы уверены, что это дочерняя категория, а не атрибуты? Может покажете исходную html-страничку для лучшей ориентировки в проблеме?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Цитата:
Это сайт авито, добавление нового объявления: https://www.avito.ru/additem Вот код до выбора основной категории: Код HTML:
Последняя строчка form-param js-value-clone-container и есть ссылка на подкатегорию. Теперь выберем основную категорию, и после последней строчки появляется код: Код HTML:
Первую категорию я цепляю по id и далее selectedIndex. А с дочерней такое не прокатывает , там нет id, соответственно и selectedIndex к нему не подходит. Мало того, дочерняя появляется лишь после сабмита основной формы, что я думаю не совсем правильная методика. Если владеете темой, помогите пожалуйста, позарез нужно сделать. |
#6
|
|||
|
|||
неужели никто не знает?(
|
#7
|
||||
|
||||
тебе уже дали ответ
Пишу программы за еду. __________________ |
#8
|
||||
|
||||
Посмотрел я код этого сайта. Несколько удивлен, что вам как-то удалось добраться до подкатегорий. В отладке этот сайт благополучно виснет, походу защита от любопытных. Попытка просмотреть исходный код сайта на разных этапах, тоже не дает требуемой категории. Видимо, как и советовали, вам просто надо перебрать весь набор элементов.
Но все-же интересно, почему при просмотре исходника не отображаются категории. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 19.07.2015 в 16:42. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
crn (20.07.2015)
|
#9
|
|||
|
|||
Цитата:
Код:
var select = webBrowser1.Document.GetElementById("fld_category_id"); mshtml.HTMLSelectElement cbProyectos = select.DomElement as mshtml.HTMLSelectElement; int i2=0; var total = cbProyectos.length; for (int i = 0; i < total; i++) { cbProyectos.selectedIndex = i; if (cbProyectos.value.Contains("24")) { i2 = i; break; } } select.InvokeMember("onchange"); // выбор подкатегории var links = webBrowser1.Document.GetElementsByTagName("select"); foreach (HtmlElement link in links) { if (link.GetAttribute("className") == "filter form-input-select") { link.SetAttribute("value", "1060"); } } В общем, сейчас стоит задача в программном эмулировании ручного выбора выпадающего списка. Правда на c# все. Последний раз редактировалось crn, 20.07.2015 в 15:37. |