WebBrowser: тыкнуть на ссылку с известным текстом

Все особенности программирования под платформу Wintel
Ответить
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

14 фев 2009, 21:17

Картина следующая: в TWebBrowser загружена страница онлайн-игрушки (http://www.klanz.ru/rooms/1). На странице - список игроков. Страница генерируется автоматически, т.е. элементы списка в коде страницы отсуствуют, а есть код некоего скрипта, выводящего этот список. Имя каждого игрока является ссылкой, причем все ссылки указывают на один адрес (http://www.klanz.ru/rooms/1#). Известно имя игрока, которое гарантированно есть на этой странице. Возможно ли как-то программно тыкнуть на это имя?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

14 фев 2009, 21:24

В принципе да. У TWebBrowser есть свойство которое ссылается на документ. Его значение - это объект, подчиняющийся DOM.
Получив ссылку на него можно делать все то же самое, что делают с документом и java-скрипты.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

14 фев 2009, 21:53

Лет 5 назад вот такую штуку нацарапал, всё по DOM должно работать..
[syntax=Delphi]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i, j: byte;
FormItem: Variant;
begin
if WB.OleObject.Document.forms.Length = 0 then Exit;
for i := 0 to WB.OleObject.Document.forms.Length - 1 do
begin
FormItem := WB.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
if FormItem.Item(j).name = 'login' then FormItem.Item(j).Value := '';
if (FormItem.item(j).type = 'submit') then WB.OleObject.Document.forms.item(i).item(j).click;
end;
end;
end;
[/syntax]
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

15 фев 2009, 01:08

Там формы нет, просто ссылки. Но попробую завтра :)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

15 фев 2009, 11:32

Это не важно. Просто вместо document.forms будет что-то другое. Все зависит от структуры документа. Содержимое любого тега доступно.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

16 фев 2009, 17:50

В итоге дело решается так: из документа вытаскивается innertext, высчитывается, на какой строке находится нужное имя, вычисляются координаты строки и делается тык мышкой в том направлении :)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

16 фев 2009, 18:19

Это один из вариантов есле по структуре достать сложно.. document.Layers итп
[syntax=Delphi] [/syntax]
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

18 фев 2009, 14:18

А если есть div с известным id, в котором выводится список игроков - как его программно проскроллить?
Либо другой вопрос: если скроллить тупо с помощью посылания WM_KEYDOWN - всегда ли TWebBrowser скроллит на одну и ту же высоту?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

18 фев 2009, 14:31

Лучше DOM почитай добраться можно к любому элементу, тем более IE вообще изврат можно полюбому развлекаться document.all. итд
В конце концов можно перебрать все элементы и сверится с id, не вижу причин скролить..
[syntax=Delphi] [/syntax]
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

18 фев 2009, 14:38

Причина скролить, насколько я понял автора есть. Наверное надо чтобы открылась страница, да еще на нужном месте сразу.
Был бы там якорь, то можно было бы его прямо в URLе добавитьчерез решеточку... А так не знаю.... Надо как-то на этот DIV фокус перевести.
А c WM_* точно можно прогадать. Юзер возьмет и по умолчанию размер шрифта другой, или настроит подмену стилей, или просто у него размер системного шрифта будет другой в винде, и все... привет...
Ответить