Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Webbrowser form element item adları
#1
Kod:
Form=00 item=01 - Name="keywords"
Form=00 item=02 - Name=""
Form=01 item=01 - Name="username"
Form=01 item=02 - Name="password"
Form=01 item=03 - Name="autologin"
Form=01 item=04 - Name="viewonline"
Form=01 item=05 - Name="redirect"
Form=01 item=06 - Name="sid"
Form=01 item=07 - Name="login"
Webbrowser içinden nasıl bu şekilde liste alabiliyoruz.  Form isimlerine ulaştım ama item numaralarına ve adlarına ulaşamadım. Yardımcı olursanız sevinirim.
Cevapla
#2
kod paylaşırsanız onun üzerinden gidelim. Daha rahat olur.
There's no place like 127.0.0.1
WWW
Cevapla
#3
function VariantIsObject(const value:OleVariant):boolean;
begin
   result := (VarType(value) = varDispatch);
end;

procedure Browser2TreeView(WebBrowser: TWebBrowser; root:TTreeNodes);
var
 i,j, k :Integer;
 FormItem, Element, SubElement: OleVariant;
 child, child2, child3 : TTreeNode;
 s_type : string;

begin
  Assert(Assigned(WebBrowser));
  Assert(Assigned(root));

  root.Clear;


 //count forms on document
 for I:=0 to WebBrowser.OleObject.Document.forms.Length -1 do
 begin
   FormItem := WebBrowser.OleObject.Document.forms.Item(I);

   if VariantIsObject(FormItem.Name) then
      child := root.AddChild(nil, 'Form'+IntToStr(i)+': '+FormItem.Name.Name)
   else
      child := root.AddChild(nil, 'Form'+IntToStr(i)+': '+FormItem.Name);
   child.ImageIndex := 3;


   For j:= 0 to FormItem.Length-1 do
   begin
     try
        Element := FormItem.Item(j);
        //when the fieldname is found, try to fill out
        child2 := root.AddChild(child, Element.Name+' = '+Element.Value);

        s_type := Element.Type;

        if s_type = 'submit' then
           child2.ImageIndex := 1
        else if s_type = 'text' then
           child2.ImageIndex := 0
        else if s_type = 'file' then
           child2.ImageIndex := 2
        else if s_type = 'hidden' then
           child2.ImageIndex := 4
        else if s_type = 'checkbox' then
           child2.ImageIndex := 5
        else if s_type = 'radio' then
           child2.ImageIndex := 6
        else if s_type = 'select-one' then
           child2.ImageIndex := 7
        else
           child2.ImageIndex := -1;

        child3 := root.AddChild(child2, 'Type='+s_type);
        child3.ImageIndex := -1;


        if s_type = 'text' then
        begin
           child3 := root.AddChild(child2, 'MaxLen='+IntToStr(Element.maxLength));
           child3.ImageIndex := -1;
        end
        else if s_type = 'select-one' then
        begin
           for k := 0 to Element.Options.Length-1 do
           begin
              SubElement := Element.Options.Item(k);
              child3 := root.AddChild(child2, SubElement.Text+ ' = <'+SubElement.Value+'>');
              child3.ImageIndex := -1;

           end;

// ShowMessage(IntToStr(Element.Options.Length));
        end;


     except
       on E:Exception do
        root.AddChild(child, E.Message);
     end;
   end;
 end;

  if root.Count > 0 then
     root.GetFirstNode.Expand(True);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  Browser2TreeView(WebBrowser1, TreeView1.Items);
end;

En son denediğim ve başka sitelerde sonuç aldığım kodlar bunlar.
Cevapla
#4
Form elemanlarının adlarına ulaşamadığınızı belirtmiştiniz. Şimdi ise "başka sitelerde sonuç aldığım kodlar bunlar" diyorsunuz. Yazdığınız kodda form elemanlarına erişim var. Sorun nedir tam anlayamadım? Sizin sorun yaşadığınız belirli bir web sitesi mi var?

Sayfadaki formaların bir listesini almak için:
var
  doc: IHTMLDocument2;
  formList: IHTMLElementCollection;
begin
  doc := WebBrowser.Document as IHTMLDocument2;
  formList:= doc.Forms as IHTMLElementCollection;
Bundan sonra formList içerisinde sayfa içindeki formalarınız mevcuttur. formList.Length ile form sayısını alabilirsiniz. Bir döngü içinde bu liste içinde dolaşabilir istediğiniz formla ilgili çalışma yaparsınız.
Yada ilgilendiğiniz formun ismi belli ise;
var
  birForm: IHTMLFormElement;
begin
   birForm := formList.Item(IlgiliFormunIsmi,'') as IHTMLFormElement;
şeklinde istediğiniz forma ulaşabilirsiniz.
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  WebBrowser'dan html kaynağını çekme burakb44 15 460 17-09-2018, Saat: 23:10
Son Yorum: burakb44
  yazıcı için form tasarımı yapmak. Bay_Y 4 271 17-07-2018, Saat: 16:01
Son Yorum: engerex
  form içindekiler arsl01 2 161 16-07-2018, Saat: 14:40
Son Yorum: arsl01
  Form.create arsl01 12 455 03-07-2018, Saat: 14:27
Son Yorum: arsl01
  [ÇÖZÜLDÜ]-Başka Uygulamadaki MDIChild Form Handle Alma hi_selamlar 9 384 29-06-2018, Saat: 09:52
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi