TWebBrowser - GetElementsByTagName - uniwersalna metoda dla kazdego obiektu/znacznika

Odpowiedz Nowy wątek
2019-05-12 06:50
0

Czasem zarowno GetElementsByID oraz GetElementsByName to za malo - niektore tagi nie maja tych parametrow. Probowalem napisac wlasna procedure w stylu GetElementsByTagName (uniwersalna dla wszystkiego), a nastepnie dzialaniu na zasadzie ustawiania atrybutow SetAttribute - moje wypociny cos mi nie wychodza - TweBrowser daje mi d**y delikatnie rzeczu ujmujac(uzywam stare Delphi 7 - Gecko - nie dziala, Chromium - cos tam dziala) a do starego TWEBBrowsera jestem przyzwyczajony:

Zblizonym tematem do dyskusji jest:
TWebBrowser i GetElementById

Zreszta mniejsza z tym do rzeczy:

Czy ktos ma gotowa procedurke w stylu GetElementsByTagName a nastepnie SetAttribute dla ustawiania tekstu i klikania przyciskow? Ponizej wklejam swoja wersje

var
  i: Integer;
  doc: IHTMLDocument2;
  elem: IHTMLElement;
  //item: TListItem;
begin
  wb.DownloadOptions := [DontExecuteScripts];
  doc:= WB.Document as IHTMLDocument2;
  if Assigned(doc) then
  begin
    for i:= 0 to doc.All.Length - 1 do
    begin
      elem:= doc.All.Item(i, EmptyParam) as IHTMLElement;
      if (elem.tagName = 'div') and (elem.ClassName = 'listing-order') then;
         elem.setattribute('data-click-area', 'xxx'));
         elem.click;
      end;
    end;

Oczywiscie ani ustawienie atrybutu ani klikniecie w przycisk niestety na chwile obecna zupelnie nie dzialaja


edytowany 1x, ostatnio: furious programming, 2019-05-12 16:59

Pozostało 580 znaków

2019-05-12 09:23
1

OK, poradzilem sobie, wklejam trosze stuningowany kod ktory jest gotowa procedura/odpowiedza na wczesniej zadane przeze mnie pytanie - byc moze z pewnoscia jeszcze komus sie to przyda!

var
  Document: IHTMLDocument3;
  Elements: IHTMLElementCollection;
  elem: IHTMLInputElement;
  i: Integer;
begin
  Document:= WB.Document as IHTMLDocument3;
  if Assigned(Document) then
  begin
    Elements:= Document.getElementsByTagName('input');
    if Assigned(Elements) then
    begin
      for i:=0 to Elements.length - 1 do
      begin
        elem:= Elements.item(i, EmptyParam) as IHTMLInputElement;
        if  Pos('Wyślij', elem.src) >= 0 then //mozna sie bawic w elem.type lub elem.name, ale ten warunek jest bardziej universalny
        begin
          OleVariant(elem).click; //byc moze uzycie OleVariant(elem) pomogloby rowniez w przypadku pierwszego wczesniej wpisanego kodu
        end;
      end;
    end;

Wstepnie moge powiedziec iz uzycie kilku powyzszych linijek sprawia, iz GetElementById lub GetElementsByName staje sie wg mnie zbedne(taikie zastosowanie jest bardziej "niskopoziomowe");


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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