Delphi Can
a Tagına tıklama - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: a Tagına tıklama (/showthread.php?tid=6963)



a Tagına tıklama - Nedim - 04-10-2022

İyi günler, 


webde bulunan a href butonuna tıklama yaptırmak istiyorum fakat  bir türlü tıklama gerçekleşmiyor.
Faklı varyasyonlar da denedim fakat çözemedim a href butonuna tıklama işlemini nasıl yapabilirim?


      iDoc := coHTMLDocument.Create as IHtmlDocument2;
      iDoc.Write(Url);
      iDoc.Close;
      aHREFtag := iDoc.All.Tags('a');
      for iHref := 0 to aHREFtag.Length - 1 do
      begin
        if SameText(aHREFtag.Item(iHref).className, 'pagination-Go to next-separator') then
        begin
          aHREFtag.Item(0).click;
        end;


<a href="/xxxx_pg_1" aria-label="Go to next page, page 2" class="pagination-next-separator">Go to next<svg xmlns="http://www.w3.org/2000/svg" width="8" height="12" viewBox="0 0 8 12" focusable="false" aria-hidden="true">


a Tagına tıklama - mrmarman - 04-10-2022

class name olarak fazladan karakter almışsınız. Sametext function ilgili TAG'a odaklanamıyor.
SameText(aHREFtag.Item(iHref).className, "pagination-next-separator")
şeklinde bir denemek isteyebilirsiniz..


Cvp: a Tagına tıklama - Nedim - 06-10-2022

(04-10-2022, Saat: 19:42)mrmarman Adlı Kullanıcıdan Alıntı: class name olarak fazladan karakter almışsınız. Sametext function ilgili TAG'a odaklanamıyor.
SameText(aHREFtag.Item(iHref).className,  "pagination-next-separator")
şeklinde bir denemek isteyebilirsiniz..



Dikkatimden kaçmış; 


Sevgili Üstat araştırma yaparken sizin bir eksi paylaşımlarınıza denk geldim. 
Kod üzerinde Kendime göre düzenleme yaptım, ama bir türlü Next linkine tıklama yaptıramadım.
Acaba sorun FMX tarafından kaynaklanıyor? Next linkine tıklama yaptırmıyor olabilir mi?




 
   Doc := coHTMLDocument.Create as IHtmlDocument2;
    Doc.Write(WebUrl);
    Doc.Close;
    Sleep(3000); // Beklet
    BoolBool := False;
    Result := False;
    I := 0;
    XSayfa := Doc.All.Tags('span');
    iLinkSay := Integer(Doc.Links.Length);
    while (I < iLinkSay) And (Not BoolBool) And (iMaxSonarkiSayfa >= 0) do
    begin
      XLink := Doc.Links.Item(I).InnerText;
      XSayfa := Doc.Links.Item(I).className;
      if SameText(XLink, 'Next') then
      begin
        Dec(iMaxSonarkiSayfa); // Yoksa yeni sayfada aramaya devam edicez...
        Doc.Links(I).Click; // HATA ----- First chance exception at $00007FF99D71FAEC. Exception class EOleSysError with message 'Gerçeklenmemiş'. Process Aramalar.exe (15448)

        // Doc.Links.Item(I).Click;
        // Doc.Item(0).Click();
        // DeleteCharacter(Doc.Item(0).Click());
        //
        Sleep(3000); // Beklet
        I := 0;
        iLinkSay := Integer(Doc.Links.Length);
        XLink := Doc.Links.Item(I);
        Result := True;
      end;
      inc(i); // While
    end;



a Tagına tıklama - vedat35 - 06-10-2022

butonun tüm html kodunu yapıştırın, buton tagları arasında onclick eventi tanımlı değilse sizin bu sanal clickiniz çalışmaz, onun yerine click event mesajını göndermeniz veya ilgili butonun fonksiyonunu javascript ile tetiklemeniz gerekir.


Cvp: a Tagına tıklama - Nedim - 06-10-2022

(06-10-2022, Saat: 16:35)vedat35 Adlı Kullanıcıdan Alıntı: butonun tüm html kodunu yapıştırın, buton tagları arasında onclick eventi tanımlı değilse sizin bu sanal clickiniz çalışmaz, onun yerine click event mesajını göndermeniz veya ilgili butonun fonksiyonunu javascript ile tetiklemeniz gerekir.


Hocam javascript ile buton tetikleme işlemi nasıl yapılır diye webde araştırma yaptım bir şey bulamadım.
Örnek kod yada link paylaşır mısınız?


a Tagına tıklama - mrmarman - 06-10-2022

@Nedim

@vedat35 haklı. Click yapılamayabilir.

Şöyle yapın eğer 
Kod:
aHREFtag.Item(iHref).href

içeriğini sorgulayın bir URL geliyorsa onu direkt navigate ettirin. sanki click ettirmiş gibi olursunuz.


Cvp: a Tagına tıklama - vedat35 - 11-10-2022

                      browser.execute_script( # JS.Element.Virtual.KeyChange
                                " var  element = document.getElementById('elementidadıburayayazilir'); "+
                               " var  evt = document.createEvent('HTMLEvents'); "+
                               " evt.initEvent('change', false, true); "+
                               " element.dispatchEvent(evt); "
                           )
                           break

örnek bir javascript event mesajı, change -> click olarak değiştirilmelidir, browser üzerinde javascript kodu execute ettirilmelidir.

html kodunu ve sayfa js leri incelemeden birşey söylemek zor.