TWebBrowser i GetElementById

0

Mamy na pewnej stronie internetowej taki fragment kodu:

 
<input name="login" type="text" />
<input id="password" name="password" type="password" />

Chcialbym wprowadzic tekst za pomoca metody GetElementByID w komponencie TWebBrowser. Robie to nastepujaco:

 
WB.OleObject.Document.GetElementById(login).Value:= TempString;
WB.OleObject.Document.GetElementById(password).Value:= TempString;

O ile z polem password nie mam zadnych problemow, tak z polem login sa problemy niestety. Przypuszczam iz to dlatego iz pole login nie ma parametru "ID".
W jaki sposob wprowadzac tekst do pol, ktore nie maja parametru "ID". Czy jest jakas alternatywa dla GetElementById? Czy tez wystarczy cos zmienic?

0

W ten sposób możesz "się dobrać" do pola typu Input po nazwie:

var
  Document: IHTMLDocument3;
  Elements: IHTMLElementCollection;
  Element: IHTMLInputElement;
  //i: Integer;
begin
  Document:= WebBrowser1.Document as IHTMLDocument3;
  if Assigned(Document) then
  begin
    Elements:= Document.getElementsByName('login');
    if Assigned(Elements) then
    begin
      //w petli by mozna pobierac gdyby bylo wiecej ale zakladam ze jest tylko 1
      //for i:=0 to Elements.length - 1 do
      // Element:= Elements.item(i, EmptyParam) as IHTMLElement;
      Element:= Elements.item(0, EmptyParam) as IHTMLInputElement;
      Element.value:= 'loginek';
    end;
  end;
end;
0

kAzek - jestes Genialny! :) Tego naprawde potrzebowalem

Mam jeszcze jedno pytanie - taka drobnostka. Chcialem aby po najechaniu myszką na dany element w TWebBrowser wyswietlila sie nazwa tego komponentu, w tym przypadku nazwa byloby "login".

 
procedure TfrmWeb.WBStatusTextChange(Sender: TObject;
  const Text: WideString);
var
  doc: IHTMLDocument2;
  elem: IHTMLElement;
begin
  doc:= WB.Document as IHTMLDocument2;
  GetCursorPos(p)
  p:= WB.ScreenToClient(p);
  if Zaladowany  then
  begin
    elem := doc.elementFromPoint(p.X, p.Y); // pobranie elementu z wsp. kursora myszy
        {W ponizszej linijce kluczowa sprawa. Co wpisac?}
    Panel3.Caption :=  NAME:' + elem.className; // wpisalem className, jednak to chyba nie to...
  end;
end;

W przypadku innych jak elem.TagName lub elem.ID nie mam problemow z wyswietleniem. Pytanie co wpisac aby wyswietlila sie takze nazwa, w tym przypadku byloby to "login".

0

Korzystaj z getAttribute tam zamiast name możesz podstawić cokolwiek chcesz innego np. id, value itp. Jeżeli takiego atrybutu nie będzie (lub będzie to pustą wartość) po prostu zwróci pusty string.

Panel3.Caption :=  elem.getAttribute('name', 0);
0

Dziala znakomicie. Jeszcze raz Dzieki! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1