![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Приветствую уважаемые программисты.
Есть такой сайт, который грузится в 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. |