Autor Beitrag
CABALxx
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Mi 21.12.05 12:07 
Hallo Leute

Ich versuche gerade wieder einen Quizbot für einen Chat zu entwickeln, das ist mir bei einem anderen Chat auch mal recht gut gelungen, diesmal gibts jedoch massive Probleme wo ich hin kuck.

In nem anderen Thread wurde mir schon excellent geholfen, um aus dem Chat alle Quellcodes zu kriegen, das ging mit den functionen die ich vorher benutzt habe nämlich nicht mehr.

Jetzt hab ich wieder ein Problem:

Das Chat Formular lässt sich nicht ausfüllen. Sonst ging das immer ganz gut mit

ausblenden Delphi-Quelltext
1:
2:
WebBrowser1.OleObject.Document.Frames.item('info').Document.Forms.item(0).Elements.item('message').value :='Richtige Antwort - ' + my_array2[t];
WebBrowser1.OleObject.document.Frames.item('info').Document.Forms.item(0).submit;



Aber bei diesem Chat funktioniert auch das nicht mehr.

Also hab ich mir von swissdelphiCenter folgenden Code zum ausfüllen von HTML Formularen geholt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; 
var 
  i, j: Integer; 
  FormItem: Variant; 
begin 
  Result := False; 
  //no form on document 
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then 
  begin 
    Exit; 
  end
  //count forms on document 
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do 
  begin 
    FormItem := WebBrowser.OleObject.Document.forms.Item(I); 
    for j := 0 to FormItem.Length - 1 do 
    begin 
      try 
        //when the fieldname is found, try to fill out 
        if FormItem.Item(j).Name = FieldName then 
        begin 
          FormItem.Item(j).Value := Value; 
          Result := True; 
        end
      except 
        Exit; 
      end
    end
  end
end;


der funktioniert bei Seiten ohne Frames auch wunderbar, nur da könnte man den weniger komplizierten Code nehmen den ich als erstes gepostet hab. Für Seiten mit Frames funktioniert der nicht, besonders nicht für den Chat, mit dem ich arbeite. Ich hab dann versucht, den Code umzuschreiben auf Frames:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
function TForm1.FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
  x : string;
begin
x:= Edit1.Text;
 
  for I := 0 to WebBrowser.OleObject.Document.Frames.item(x).Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.Frames.item(x).Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
    begin
      try 
        //when the fieldname is found, try to fill out
        if FormItem.Item(j).Name = FieldName then 
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end
      except
        Exit;
      end;
    end;
  end;
end;



Hat aber nicht wirklich funktioniert, gibt mir ne Fehlermeldung aus bei

ausblenden Quelltext
1:
for I := 0 to WebBrowser.OleObject.Document.Frames.item(x).Document.forms.Length - 1 do					



Ich vermute es liegt am Frame name, der ist mir allerdings bekannt.

Weiss vll. jemand einen besseren Weg, um das Formular auszufüllen? Dabei ist wichtig, das keine eizelnen Frames extra geladen ( also praktisch die Seite neu geladen wird ) werden, weil lädt man irgendetwas neu, dann fliegt man aus dem Chat und die UID ändert sich wieder.

Bin dankbar für alle Ratschläge

MfG

CABALxx
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 21.12.05 21:37 
Hallo,

Wenn Du die Variable x so einbaust, bekommst Du den Fehler:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var x : String;
//...
x := Edit1.Text; 
for I := 0 to WebBrowser.OleObject.Document.Frames.item(x).Document.forms.Length - 1 do

:arrow: Da hilft Dir ein Trick,
ich hab es zuerst nicht geglaubt :shock:, aber es funktioniert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var x : String;
//...
x := Edit1.Text; 
for I := 0 to WebBrowser.OleObject.Document.Frames.item(''+x+'').Document.forms.Length - 1 do


Es gibt auch noch diese andere Möglichkeit über das DOM-Objekt all auf Frames zuzugreifen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
var sName : String;
//...  
  sName := WebBrowser1.OleObject.Document.all.tags('FRAME').Item(4).Name;
  Memo1.Lines.Add('Anzahl Forms: '+IntToStr(WebBrowser1.OleObject.Document.Frames.item(''+sName+'').Document.forms.Length));


Zum Nachlesen weiterer Infos kann ich das empfehlen:
SELFHTML: JavaScript/DOM/Objektreferenz

Ps.: Wann hast Du das letztemal Deine PN's gelesen?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
CABALxx Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 174


D7 Ent
BeitragVerfasst: Do 22.12.05 21:21 
Hallo

Ich hab das grad mal probiert mit

ausblenden Quelltext
1:
WebBrowser.OleObject.Document.Frames.item(''+x+'').Document.forms.Length - 1 do					



und das funktioniert tatsächlich, auch wenns irgendwo doch schon schwer nachvollziehbar ist.

Danke dir schon zum zweiten mal vielmals.

Deine Lösungen funktionieren immer tadellos. Kennst dich gut aus mit Internetanwendungen von Delphi :D :D :D

Dank dir Lannes, normal häng ich an so eine Problem nimmer etwas länger :D .

PS: wegen der PN sry
ich krieg so wenige das ich eigentlich nie nach kucke. Tut mir leid.

Die Implementierung des Chats ist auch kein Problem mehr, ich geh über chat.rapidchat.de rein und geb einfach die passende ID ein.

Also nochmals big thx
jetzt sollte dem Quizbot nichts mehr im Wege stehen. Hoffe ich :) :)