Доброго времени суток! Пожалуйста помогите мне! есть сайт www.ogame.ru там на первой страничке форма выпадающий комбобокс два едита и кнопка. Я открываю этот сайт в WebBrowser1 и мне надо по нажатию кнопки чтобы выбиралось значение из комбобокса, вводились значение в едиты и нажималась кнопка. Честное слова весь день рылся по всем примерам и описаловкам, но ничего не получается. Обьекты не находятся. Помогите пожалуйста!
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
20-06-2006 14:40 | Сообщение от автора вопроса
Привет! Не понял куды ты мне послал. Я не получил. Напиши мне на адрес garmahis собака land.ru
Стукни ко мне в аську, я тебе послал в ПМ, есть предложение по усовершенствованию твоего бота. Вчера тестил твоего есть недочеты, у меня они уже устранены.
Всё всем спасибо! И с кобобоксом разобрался. Вот конечный вариант процедуры
procedure TForm9.Frame(Doc:IHTMLDocument2;Add:Boolean;IName:String;Comm:String);
var
frames:IHTMLFramesCollection2;
i,y:integer;
Disp:IDispatch;
Element:IHTMLElement;
InputElement:IHTMLInputElement;
ov:OleVariant;
Window2:IHTMLWindow2;
Uni:IHTMLSelectElement;
begin
//Memo2.Lines.Add(Doc.body.innerHTML);
for i:=1 to Doc.all.length do
begin
Disp:=Doc.all.item(Pred(i),0);
Disp.QueryInterface(IHTMLElement,Element);
if Assigned(Element) then
begin
Element.QueryInterface(IHTMLInputElement,InputElement);
if Element.tagName='SELECT' then
begin
Element.QueryInterface(IHTMLSelectElement,Uni);
if Assigned(Uni) then
begin
if Add=False then
Memo1.Lines.Add('Select= '+Uni.name)
else
if Edit1.Text='Select' then
Uni.selectedIndex:=StrToInt(Edit2.Text);
end;
end;
if Assigned(InputElement) then
begin
if Add=False then
Memo1.Lines.Add('NAME= '+InputElement.Name)
else
if InputElement.name=IName then
begin
if Comm<>'ClickBt' then
InputElement.value:=Comm
else
Element.click;
end;
end;
end;
end;
frames:=Doc.frames;
if Assigned(frames) then
begin
for y:=1 to frames.length do
begin
ov:=y-1;
Disp:=frames.item(ov);
Disp.QueryInterface(IHTMLWindow2,Window2);
Doc:=Window2.document;
Frame(Doc,Add,IName,Comm);
end;
end;
end;
Теперь может кто ни будь подскажет почему меня сервер пинает с доступом когда я фреймы сканирую и как это обойти?
1. Хочу сохранять флоты и ресы при нападении.
2. Хочу чтобы при просмотре галактики он в базу записавал кто на какой планете.
2. Хочу чтобы он тужа же добавлял шпионские логи.
Но пока как видишь не могу сдвинуться с ввода логина и пароля :( Кроме того после того как я логинюсь и начинаю сканировать фреймы мне выдаётся сообщение что отказано в доступе. Так что мне ещё мучиться и мучиться...
Как я уже написал с Комбобоксом я пока не разобрался, но так как с такой проблемой сталкнулся не я один приведу пример моего решения для эдитов и кнопки.
На форме лежат Memo1, Edit1,Edit2,Edit3,WebBrowser1,SpeedButton1,SpeedButton2,SpeedButton3
основная процедура обработи фреймов
procedure TForm1.Frame(Doc:IHTMLDocument2;Add:Boolean;IName:String;Comm:String);
var
frames:IHTMLFramesCollection2;
i,y:integer;
Disp:IDispatch;
Element:IHTMLElement;
InputElement:IHTMLInputElement;
ov:OleVariant;
Window2:IHTMLWindow2;
begin
for i:=1 to Doc.all.length do
begin
Disp:=Doc.all.item(Pred(i),0);
Disp.QueryInterface(IHTMLElement,Element);
if Assigned(Element) then
begin
Element.QueryInterface(IHTMLInputElement,InputElement);
if Assigned(InputElement) then
begin
if Add=False then
Memo1.Lines.Add('NAME= '+InputElement.Name)
else
if InputElement.name=IName then
begin
if Comm<>'ClickBt' then
InputElement.value:=Comm
else
begin
Element.click;
end;
end;
end;
end;
end;
frames:=Doc.frames;
if Assigned(frames) then
begin
for y:=1 to frames.length do
begin
ov:=y-1;
Disp:=frames.item(ov);
Disp.QueryInterface(IHTMLWindow2,Window2);
Frame(Window2.document,Add,IName,Comm);
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
WebBrowser1.Navigate(Edit3.Text);
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
Doc:IHTMLDocument2;
begin
Memo1.Lines.Clear;
if not Assigned(WebBrowser1.ControlInterface.Document) then
Memo1.Lines.Add('Фрейм Верхнего уровня ненайден!')
else
begin
WebBrowser1.ControlInterface.Document.QueryInterface(IHtmlDocument2,Doc);
Frame(Doc,False,'','');
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
Doc:IHTMLDocument2;
begin
Memo1.Lines.Clear;
if Assigned(WebBrowser1.ControlInterface.Document) then
begin
WebBrowser1.ControlInterface.Document.QueryInterface(IHtmlDocument2,Doc);
Frame(Doc,True,Edit1.Text,Edit2.Text);
end;
end;
Всё всем большое спасибо с едитами и кнопкой разобрался! Остался последний опрос. Там сомбобокс у которого стиль csDropDownList тоесть список из которого можно выбрать значение как его програмно прокрутить или задать значение? Помоему он не инпут компонет покрайней мере он так не опознаётся.
Проверил в своем броузере на webBrowser
там на первой страничке фрейм на нем другой фрейм http://www.ogame.ru/portal/?lang=ru&frameset=1
на нем выбрал ввел нажал получил
Такого игрока нет! - Создать нового игрока.
все нормально работает
только нужно убрать эти фреймы и сравнить html
что присылают разные серверы
наверно там и формирование страницы такое же чудное
что зависит от сервера
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.