İnternet explorer ile açılan sayfa içinde dolaşma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen Serhat »

Lord_Ares yazdı:marman hocamın kodunu atlamışsınız diyerek eleştirmek yerine sizde bir örnek paylaşın bizlerde görelim öğrenelim. Sizde bilirsiniz ki temel kural her paylaşıma saygı duymaktır. Kodu denedim bahsettiğiniz sorundan eser yok, keşke sizde zahmet edip deneseydiniz Serhat arkadaşım. Ellerinize sağlık sayın marman hocam ve tuğrul hocam
Saygılarımla..

Mrmarman hocam amacım sadece durumu anlatmaktı sizin bu forumda hakkınız asla ödenemez bunun farkındayım, saygılarımla...

Lord_Ares "kodu denedim bahsettiğiniz sorundan eser yok" demişsiniz tabiki merak ettim denedim ve dediğim gibi google da sonraki sayfaya gitmiyor ilk sayfada arama yapıyor...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

Serhat yazdı:...dediğim gibi google da sonraki sayfaya gitmiyor ilk sayfada arama yapıyor...
- Siz bir yazılımcı mısınız yoksa işveren mi ? Bu ayrımı yapmanızı salık veririm. :roll:

- Soruda belirli bir çözüm istenmiş, cevap da buna yönelik özelleşmiş durumdayken bu sorunun kaynağı nedir ? Belki de sorunun sahibi sadece ilk sayfada olanlar ile ilgileniyor, belki de arama kriterini doğru verip doğru sonuçları getirme yükünü Google'a bırakmak taraftarı, bunu nereden biliyorsunuz ?

- Ayrıca Google'ın 160. sırasındakini sunsak, bu sefer 260. sıradakini vermiyor diye bir soru mu soracaksınız ?!

@Lord_Ares bu forumdaki HTMLParse olayında en etkin çözüm üretenlerdendir. Biraz arama yaparsan göreceksin.

- Size linklere tıklamayı sunuyoruz (balık sunmak değil o balığı tutmayı öğretmek deriz ya), bu örnek üzerinden bir Google'daki NEXT butonuna basamıyorsanız, çözümü armut piş şeklinde vermeyen biz mi yoksa sonucu halen sorgulayan siz mi haklısınız ?!

- Aksi durumda yani yazılımcı gözüyle bakamıyorsanız bu kodlarla en azından sizin işiniz olamaz zaten. Bu durumda size belirli şartlarda sipariş vermek düşer. Farkı yaratan da budur.
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen brs »

Sanırım yanlış anlaşılmalar var biraz ortam yumuşasın :)

Kod: Tümünü seç

begin
    XLink := IEpp.Document.Links.Item(I);
    Sonraki := IEpp.Document.Links.Item(I).Text;
    if (Sonraki = '3') then
    begin
      IEpp.Document.Links(I).Click;
      Bekle(IEpp);
    end
    else
    begin
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

@brs

- Bir sonraki soru 3'e bakıyor ama 4'e bakmyor olacaktır.

- Neyse senin için açıklayayım, bunun doğru yolu önce "Türkçe" tarama ekranı mı olduğunu sorgulamak gibisinden Dil'i algılamak ile başlar, sonra da Türkçe için bir boolGoogle değerini TRUE yapma işlemini askıya alıp , 'Sonraki' kelimesinin olduğu linke tıklamaktır. Taa ki 'Sonraki' kelimesi yok olduğunda ki bu Google sayfalarının tümünün tarandığı anlamına gelir -veya network koptu, cevap alamadın vb. de olabilir- o zaman TRUE değerini verir döngüden çıkarsın ve işlemi sonlandırırsın.

- Ayrıca kontrol etmen gereken bir diğer unsur da (Google parametrik taramada olan ancak Google arama ekranında hiç karşılaşmadığım ama ola ki) ardışık aramalarda Google'ın yeni captcha kontrol mekanizmasını takip ederek durumu arama yapan kişiye rapor edip bu adımı geçmek için araya INSERT yapacağın bir function / procedure ile de halletmesi çocuk oyuncağı...
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen brs »

Üstadım sayısal dememdeki amaç tüm arama motorlarının ortak özelliği 1-2-3-4 olduğu için sayısal bir alan bana daha mantıklı geldi, örnek vereyim bing için sonraki metni geçerli olmaz diye düşünüyorum...

Benim paylaştığım kod kafadan yazdım fakat sonraki sayfaya geçmedi veya ben yapamadım kodlama anlamında bir örnek paylaşır mısınız biz amatörler için :mrgreen: ...
En son brs tarafından 11 Ara 2014 01:55 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

Mesajımı sondan başa okuduğunu düşündüm,
mrmarman yazdı:bunun doğru yolu önce "Türkçe" tarama ekranı mı olduğunu sorgulamak gibisinden Dil'i algılamak ile başlar, sonra da Türkçe için bir boolGoogle değerini TRUE yapma işlemini askıya alıp , 'Sonraki' kelimesinin olduğu linke tıklamaktır.
Uzağa gitmeye gerek yok, BING olması gerekli değil GOOGLE.DE ile ararsan da 'Sonraki' değil Almanca'sını göreceksin zaten değil mi ? :wink:

Resim
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen brs »

brs yazdı:Üstadım sayısal dememdeki amaç tüm arama motorlarının ortak özelliği 1-2-3-4 olduğu için sayısal bir alan bana daha mantıklı geldi, örnek vereyim bing için sonraki metni geçerli olmaz diye düşünüyorum...

Benim paylaştığım kod kafadan yazdım fakat sonraki sayfaya geçmedi veya ben yapamadım kodlama anlamında bir örnek paylaşır mısınız biz amatörler için :mrgreen: ...
Üstadım aynı anda cevap yazmışız dikkatinizden kaçar diye tekrar mesajımı paylaştım (örnek paylaşır mısınız)
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

brs yazdı:
brs yazdı:Üstadım sayısal dememdeki amaç tüm arama motorlarının ortak özelliği 1-2-3-4 olduğu için sayısal bir alan bana daha mantıklı geldi, örnek vereyim bing için sonraki metni geçerli olmaz diye düşünüyorum...

Benim paylaştığım kod kafadan yazdım fakat sonraki sayfaya geçmedi veya ben yapamadım kodlama anlamında bir örnek paylaşır mısınız biz amatörler için :mrgreen: ...
Üstadım aynı anda cevap yazmışız dikkatinizden kaçar diye tekrar mesajımı paylaştım (örnek paylaşır mısınız)
Evet kaçırmışım.

- Bu arada amatörler derken kendine de haksızlık etme Bu forumda ve diğer eski forumda çaba gösteren sayılı kişilerden olduğunu en azından ben biliyorum...

- Aşağıda göreceğin gibi herhangi bir değişiklik yok, sadece WHILE döngüsünü bypass ediyoruz.

- Google taradım, n11.com 2. sayafa olduğunu görerek onu baz aldım. Sen de önce bak istediğin sayfadaki bir sonuca odaklı testini yapabilirsin.

Kod: Tümünü seç

Function AradigimLinkeTikla( strAra, strURL, strBulunacak: String ): boolean;
  procedure Bekle( IEpp: OleVariant );
  begin
      while (IEpp.Busy) do
      begin
        Sleep(1);
        Application.ProcessMessages;
      end;
  end;
var
  I, J   : Integer;
  IEpp   : OleVariant;
  XLink, XSayfa : String;
  boolGoogle : Boolean;
  iLinkSay   : Integer;
begin
  if (VarIsEmpty(IEpp)) then
  begin
    IEpp := CreateOleObject('InternetExplorer.Application');
    ShowWindow(IEpp.HWND, SW_SHOWMAXIMIZED);
    IEpp.Visible := True;
  end;
  IEpp.Navigate('https://www.google.com.tr/search?q=' + strAra);
  Bekle( IEpp );

  boolGoogle       := False;
  Result           := False;
  i                := 0;
  iLinkSay         := Integer(IEpp.Document.Links.length);
  while (i < iLinkSay ) AND (NOT boolGoogle)do
  begin
    XLink  := IEpp.Document.Links.Item(I);
    XSayfa := IEpp.Document.Links.Item(I).Text;
    if Pos( 'Sonraki', XSayfa ) > 0 then
    begin
      // Sona geldik, yeni sayfayla devam edicez...
      IEpp.Document.Links(I).Click;
      Bekle( IEpp );
      i        := 0;
      iLinkSay := Integer(IEpp.Document.Links.length);
      XLink  := IEpp.Document.Links.Item(I);
    end;

    if Pos( UpperCase(strUrl), UpperCase(XLink) ) > 0 then
    begin
      boolGoogle := true;
      IEpp.Document.Links(I).Click;
      Bekle( IEpp );

      J := 0;
      while (J < Integer(IEpp.Document.Links.length) ) AND (NOT Result) do
      begin
        XSayfa := IEpp.Document.Links.Item(J).Text;
        if Pos( strBulunacak, XSayfa ) > 0 then
        begin
          IEpp.Document.Links(J).Click;
          Result := True;
        end;
        Bekle( IEpp );
        inc(J);
      end;
    end;
    inc(i);
  end; // While
end;
Bu da kullanımı

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if AradigimLinkeTikla( 'bilgisayar', 'www.n11.com', 'İletişim' )
    then MessageDlg('İşlem başarılı', mtInformation, [mbOk], 0)
    else MessageDlg('İletişim linki bulunamadı', mtError, [mbOk], 0);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen brs »

Teşekkür ederim, Açıkçası başta siz olmak üzere ve sayılı bir kaç kişiyi TAKİP ederim mutlaka yazılarınızı okurum ve paylaşımlarınızı arşivlerim...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen hido »

Mrmarman hocam "brs" arkadaşımın biraz konuya deyinmiş benimde kafama takıldı denedim de aynı zamanda bir sonraki sayfaya bing de nasıl yapabiliriz yardımcı olursanız çok mutlu olurum...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

hido yazdı:Mrmarman hocam "brs" arkadaşımın biraz konuya deyinmiş benimde kafama takıldı denedim de aynı zamanda bir sonraki sayfaya bing de nasıl yapabiliriz yardımcı olursanız çok mutlu olurum...
Gözünü seveyim, kodu bir dene olur mu ? Bing'de de aynı kod çalışıyor. Beni de kendimden şüpheye sevk ediyorsun... :roll:
Bir kod yaz bu çalışmıyor de ona çözüm bulalım olur mu kardeşim.

Tek yapacağın güncelleme

Kod: Tümünü seç

  IEpp.Navigate('http://www.bing.com/search?q=' + strAra);
kısmı o kadar. Bing'de de Sonraki olarak geçiyor.

Test ettiğim kod şöyle

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if AradigimLinkeTikla( 'bilgisayar', 'www.exper.com', 'İletişim' )
    then MessageDlg('İşlem başarılı', mtInformation, [mbOk], 0)
    else MessageDlg('İletişim linki bulunamadı', mtError, [mbOk], 0);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

Sana ekstra bir kolaylık sağladım. Neden, öyle umutsuzca sayfa sayfa dolaşmasını limitlemek için..
Ne ekledim : iMaxSonrakiSayfa diye bir Integer parametre. Sen diyebileceksin ki (örneğin 10) sayfa sonra aramayı bırak, pes et. :)

Kod: Tümünü seç

Function AradigimLinkeTikla( strAra, strURL, strBulunacak: String; iMaxSonarkiSayfa:Integer ): boolean;
  procedure Bekle( IEpp: OleVariant );
  begin
      while (IEpp.Busy) do
      begin
        Sleep(1);
        Application.ProcessMessages;
      end;
  end;
var
  I, J   : Integer;
  IEpp   : OleVariant;
  XLink, XSayfa : String;
  boolGoogle : Boolean;
  iLinkSay   : Integer;
begin
  if (VarIsEmpty(IEpp)) then
  begin
    IEpp := CreateOleObject('InternetExplorer.Application');
    ShowWindow(IEpp.HWND, SW_SHOWMAXIMIZED);
    IEpp.Visible := True;
  end;
  IEpp.Navigate('http://www.bing.com/search?q=' + strAra);
  Bekle( IEpp );

  boolGoogle       := False;
  Result           := False;
  i                := 0;
  iLinkSay         := Integer(IEpp.Document.Links.length);
  while (i < iLinkSay ) AND (NOT boolGoogle) AND (iMaxSonarkiSayfa >= 0) do
  begin
    XLink  := IEpp.Document.Links.Item(I);
    XSayfa := IEpp.Document.Links.Item(I).Text;
    if Pos( 'Sonraki', XSayfa ) > 0 then
    begin
      showmessageFmt('%d',[ iMaxSonarkiSayfa ] );
      Dec(iMaxSonarkiSayfa);
      // Sona geldik, yeni sayfayla devam edicez...
      IEpp.Document.Links(I).Click;
      Bekle( IEpp );
      i        := 0;
      iLinkSay := Integer(IEpp.Document.Links.length);
      XLink  := IEpp.Document.Links.Item(I);
    end;

    if Pos( UpperCase(strUrl), UpperCase(XLink) ) > 0 then
    begin
      boolGoogle := true;
      IEpp.Document.Links(I).Click;
      Bekle( IEpp );

      J := 0;
      while (J < Integer(IEpp.Document.Links.length) ) AND (NOT Result) do
      begin
        XSayfa := IEpp.Document.Links.Item(J).Text;
        if Pos( strBulunacak, XSayfa ) > 0 then
        begin
          IEpp.Document.Links(J).Click;
          Result := True;
        end;
        Bekle( IEpp );
        inc(J);
      end;
    end;
    inc(i);
  end; // While
end;

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if AradigimLinkeTikla( 'bilgisayar', 'www.n11.com', 'İletişim', 3 )
    then MessageDlg('İşlem başarılı', mtInformation, [mbOk], 0)
    else MessageDlg('İletişim linki bulunamadı', mtError, [mbOk], 0);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen hido »

(Gözünü seveyim, kodu bir dene olur mu ? Bing'de de aynı kod çalışıyor. Beni de kendimden şüpheye sevk ediyorsun...) Bayıldım hocam yazınıza, harikasınız sanal ortam olduğu için insanlar bazen yanlış anlaşılma oluyor...

Hocam dedğiniz gibi bingde de çalışıyor inanın ama 20 kez denediysem 3 kez sonraki sayfaya geçmştir acaba bu kullandığım intenet explorer ile ilgili olabilir mi? bende 11 yüklü.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen mrmarman »

Webbrowser ile yaparsan daha az sorun yaşarsın.

Google, Bing vb. aramanı yaparsın, bulduğun nihai sayfayı explorer ile açtırırsın olur biter.

Bir mekanizmada bir çalışıyor bir çalışmıyor durumu varsa kontrol imkanın kadar çözüm üretebilirsin. Her ne kadar twebbrowser ile Explorer aynı mekanizma olsa da parent/owner ilişkisi bakımından Twebbrowser'a daha hakim olunabilir durumdadır...
Resim
Resim ....Resim
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: İnternet explorer ile açılan sayfa içinde dolaşma

Mesaj gönderen dogan »

Selam, Çok güzel bir uygulama elinize sağlık, bulunan kayıtları ben memo ya alıyorum aranan link kaçıncı sırada olduğunu nasıl alabilirim? showmessage('xxxxx'); gibi
Cevapla