• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Perform и Webbrowser

  • Автор темы Vadik(R)
  • Дата начала
V

Vadik(R)

Люди, помогите начинающему программисту, который умеет только делать программы "A+B" и "Hello World!". И который наконец-то нашёл вроде нормальный форум. У меня стоит делфи 7, что бы не было разногласий. Объясните, что надо добавить в программу, что бы она пошла? Я думаю, вы поняли, мне надо кликнуть в окне WebBrowser по ссылке Яндекса через посылание клавиш методом Perform.Посмотреть вложение problem.rar
 
V

Vadik(R)

Если можешь и по-другому, то напиши. Я знаю ещё только SendMessage. Нужен сам факт того, что приложение посылает клавишу в веббраузер.
 
V

Vadik(R)

Да, он реализован, только почёму не открывается страница Яндекса? Или тогда другой вопрос: какие клавиши я должен послать в WebBrowser1, чтобы со страницы C:\index.html я перешёл по ссылке на Яндекс? Я пробовал посылать только VK_TAB и VK_RETURN.
 
Z

zubr

Для: Vadik®
Непонятно что ты хочешь получить передавая окну WebBrowser сообщение WM_CHAR. Стоит почитать инфу по WebBrowser, гугл еще никто не отменял.
Тебе надо сделать примерно следующее:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
doc:IHTMLDocument2;
alltags:IHTMLElementCollection;
links:IHTMLElementCollection;
link:IHTMLElement;
begin
doc:=WebBrowser1.Document as IHTMLDocument2;
If doc=nil then
exit;
alltags:=doc.all as IHTMLElementCollection;
If alltags=nil then
exit;
links:=alltags.tags('a') as IHTMLElementCollection;
If links=nil then
exit;
If links.length=0 then
exit;
link:=links.item(0, 0) as IHTMLElement;
If link=nil then
exit;
link.click;
end;
Чтобы это работало надо импортировать библиотеку типов Microsoft HTML Object Library, а полученный unit MSHTML_TLB.pas подключить к твоему модулю.
 
V

Vadik(R)

Спасибо, всё работает! Ты даже ответил больше, я собирался задать ещё один вопрос, теперь не придётся ))
 
V

Vadik(R)

Люди, а вот ещё последний вопрос по этой теме. Я знаю, что вы посылали меня искать справочнике в гугле, но думаю изучать делфи не стоит начиная с компонента WebBrowser. Просто хочу сделать одну программку, вот и всё. Поэтому, вот вопрос: как представить загруженный хтмл документ в виде текста? Конечно, я знаю что можно просто кликнуть "Просмотр HTML-кода", но мне надо программным способом, то есть в виде строки. И сразу хочу сказать, чего я хочу этим добиться. При загрузке документа я хочу проверить действительно ли он загрузился или вышла ошибка 404? Буду очень благодарен, если вы напишите сразу готовый код по поводу как узнать есть ли ошибка или нет, но всё же хочу сам поэксперементировать своей идеей со строкой, поэтому больше жду ответа на первый вопрос в этом сообщении.
 
V

Vadik(R)

преждевременно извиняюсь за свою невнимательность... :eek: но я не нашёл ни onError404 или чего-то подобного, ни метода как представить документ в виде строки ...
 
Z

zubr

Для: sax_ol
События OnNavigateError нет в WebBrowser.
Для: Vadik®
Обрабатывай событие OnStatusTextChange. Что то типа:
Код:
procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
const Text: WideString);
begin
Memo1.Lines.Add(string(Text));
end;
А вот тебе один из нескольких вариантов получения контекста документа:
Код:
function TForm1.GetContext:string;
var 
PersistStream:IPersistStreamInit;
MemStream:TMemoryStream;
Stream: IStream; 
SaveResult: HRESULT;
str:TStringList;
s:string;
begin
Result:='';
PersistStream:=WebBrowser1.Document as IPersistStreamInit;
MemStream:=TMemoryStream.Create;
try
Stream:=TStreamAdapter.Create(MemStream, soReference) as IStream;
SaveResult:=PersistStream.Save(Stream, System.True);
if FAILED(SaveResult) then
exit;
str:=TStringList.Create;
try
MemStream.Position:=0;
str.LoadFromStream(MemStream);
s:=str.Text;
finally
str.Free;
end;
finally
MemStream.Free;
end;
Result:=s;
end;
 
Z

zubr

Для: sax_ol
Не знаю откуда этот дядька взял событие OnNavigateError, в Delphi5-7 такого события нет. Или есть такое событие в TWebBrowser более поздних версий (хотя: These notes are believed to be correct for Delphi 6 and Delphi 7 with Internet Explorer 6, and may apply to other versions as well.), или дядька какую то травку покуривает. :eek:
 
V

Vadik(R)

Спасибо большое! Хотя я ещё и не разбираюсь в таких штуках как стрим, мне это пока и не надо, скоро и так научусь понимать их. Самое главное - мне доступен хтмл код документа в виде строки! :) :(
 
V

Vadik(R)

Люди, а вот ещё вопрос по этой теме. zubr предложил вариант как кликать по ссылке. А если потребуеться, например заполнить автоматически какое-нибудь поле в веббраузере, то как быть?
например, имеется хтмл-ка:
Код:
<HTML>
<HEAD>
<TITLE>codeby.net</TITLE>
</HEAD>
<BODY>
<FORM ACTION="xxx">
<INPUT TYPE="TEXT" VALUE="" SIZE=20>
<INPUT TYPE="SUBMIT" VALUE="Отправить"><INPUT TYPE="RESET" VALUE="Очистить">
</FORM>
</BODY>
</HTML>
Как мне можно программно написать в поле "Вадим" и щёлкнуть по кнопке "Отправить"?
 
Z

zubr

Вот тебе пример из DRKB:
Код:
procedure TForm1.SubmitPostForm; 
var 
strPostData: string; 
Data: Pointer; 
URL, Flags, TargetFrameName, PostData, Headers: OleVariant; 
begin 
{ 

< !-- submit this html form: --> 

< form method=" post" action=" http://127.0.0.1/cgi-bin/register.pl" > 

< input type=" text" name=" FIRSTNAME" value=" Hans" > 

< input type=" text" name=" LASTNAME" value=" Gulo" > 

< input type=" text" name=" NOTE" value=" thats it" > 

< input type=" submit" > 

< /form> 

} 

strPostData := 'FIRSTNAME=Hans& LASTNAME=Gulo& NOTE=thats+it'; 

PostData := VarArrayCreate([0, Length(strPostData) - 1], varByte); 

Data := VarArrayLock(PostData); 

try 

Move(strPostData[1], Data^, Length(strPostData)); 

finally 

VarArrayUnlock(PostData); 

end; 

URL := 'http://127.0.0.1/cgi-bin/register.pl'; 

Flags := EmptyParam; 

TargetFrameName := EmptyParam; 

Headers := EmptyParam; // TWebBrowse 

// эти заголовки соответствующими зна?ениями 

WebBrowser1.Navigate2(URL, Flags, TargetFrameName, PostData, Headers); 


end;
 
B

Barmutik

Для: Vadik®
Или используя пример zubr пройтись по объектной модели и заполнить нужные поля и нажать на кнопку с помощью её метода Click
 
V

Vadik(R)

Спасибо! Теперь я знаю как правильно использовать Navigate2 :angry:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!