Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.07.2015, 21:20
crn crn вне форума
Прохожий
 
Регистрация: 13.07.2015
Сообщения: 5
Версия Delphi: 7
Репутация: 10
По умолчанию 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  
Старый 15.07.2015, 12:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Всегда можно пройтись по коллекции элементов
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 15.07.2015, 18:28
crn crn вне форума
Прохожий
 
Регистрация: 13.07.2015
Сообщения: 5
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Всегда можно пройтись по коллекции элементов
можно то можно, но как?))
Ответить с цитированием
  #4  
Старый 15.07.2015, 19:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А вы уверены, что это дочерняя категория, а не атрибуты? Может покажете исходную html-страничку для лучшей ориентировки в проблеме?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 15.07.2015, 23:20
crn crn вне форума
Прохожий
 
Регистрация: 13.07.2015
Сообщения: 5
Версия Delphi: 7
Репутация: 10
Счастье

Цитата:
Сообщение от Страдалецъ
А вы уверены, что это дочерняя категория, а не атрибуты? Может покажете исходную html-страничку для лучшей ориентировки в проблеме?
Нет, не уверен. Но уверен, что она появляется только лишь после выбора основной. Но ДО выбора основной категории, дочерняя существует в коде лишь одной строчкой.
Это сайт авито, добавление нового объявления: https://www.avito.ru/additem

Вот код до выбора основной категории:
Код HTML:
<select class="form-input-select" id="fld_category_id" name="category_id" title="Выберите категорию объявления"> <option value="">-- Выберите категорию --</option> <optgroup label="Транспорт"> <option value="9">Автомобили</option> <option value="14">Мотоциклы и мототехника</option> <option value="81">Грузовики и спецтехника</option> <option value="11">Водный транспорт</option> <option value="10">Запчасти и аксессуары</option> </optgroup> <optgroup label="Недвижимость"> <option value="24">Квартиры</option> <option value="23">Комнаты</option> <option value="25">Дома, дачи, коттеджи</option> <option value="26">Земельные участки</option> <option value="85">Гаражи и машиноместа</option> <option value="42">Коммерческая недвижимость</option> <option value="86">Недвижимость за рубежом</option></optgroup> <optgroup label="Работа"> <option value="111">Вакансии (поиск сотрудников)</option> <option value="112">Резюме (поиск работы)</option></optgroup> //// и т.д. и т.п. аналогично вышеприведенным категориям </select> <div class="form-param js-value-clone-container"></div>

Последняя строчка form-param js-value-clone-container и есть ссылка на подкатегорию.
Теперь выберем основную категорию, и после последней строчки появляется код:
Код HTML:
<div class="form-param js-value-clone-container"> <select data-name="params[201]" class="filter form-input-select"> <option value="">-- Тип объявления --</option> <option value="1059">Продам</option> <option value="1060">Сдам</option> <option value="1058">Куплю</option> <option value="1061">Сниму</option></select> </div>

Первую категорию я цепляю по id и далее selectedIndex. А с дочерней такое не прокатывает , там нет id, соответственно и selectedIndex к нему не подходит.
Мало того, дочерняя появляется лишь после сабмита основной формы, что я думаю не совсем правильная методика.
Если владеете темой, помогите пожалуйста, позарез нужно сделать.
Ответить с цитированием
  #6  
Старый 19.07.2015, 01:49
crn crn вне форума
Прохожий
 
Регистрация: 13.07.2015
Сообщения: 5
Версия Delphi: 7
Репутация: 10
По умолчанию

неужели никто не знает?(
Ответить с цитированием
  #7  
Старый 19.07.2015, 07:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

тебе уже дали ответ
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 19.07.2015, 13:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Посмотрел я код этого сайта. Несколько удивлен, что вам как-то удалось добраться до подкатегорий. В отладке этот сайт благополучно виснет, походу защита от любопытных. Попытка просмотреть исходный код сайта на разных этапах, тоже не дает требуемой категории. Видимо, как и советовали, вам просто надо перебрать весь набор элементов.
Но все-же интересно, почему при просмотре исходника не отображаются категории.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 19.07.2015 в 16:42.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
crn (20.07.2015)
  #9  
Старый 20.07.2015, 15:35
crn crn вне форума
Прохожий
 
Регистрация: 13.07.2015
Сообщения: 5
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Посмотрел я код этого сайта. Несколько удивлен, что вам как-то удалось добраться до подкатегорий. В отладке этот сайт благополучно виснет, походу защита от любопытных. Попытка просмотреть исходный код сайта на разных этапах, тоже не дает требуемой категории. Видимо, как и советовали, вам просто надо перебрать весь набор элементов.
Но все-же интересно, почему при просмотре исходника не отображаются категории.
До подкатегори я добрался, и подкатегорию тоже получилось выбрать по имени класса:
Код:
    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");
                    }
                }
Но, подкатегория появляется только при ручном выборе основной категории, но никак не при программном, делал InvokeMember, не помогает.
В общем, сейчас стоит задача в программном эмулировании ручного выбора выпадающего списка.
Правда на c# все.

Последний раз редактировалось crn, 20.07.2015 в 15:37.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:01.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter