• 26-05-2013, 20:59:40
    #1
    Merhaba Twitter için bir program yapıyorum. Yapmak istediğim şu twitter'da mesela takipedenitakipederim url yoluna gidiyorum webbrowser ile sonra ordaki tweet atanları takip etmeye çalışıyorum. Kod bloğumda bir kısmak kadar çalışıyor. Direkt orada takip et kısmı yok o yüzden kullanıcı adına tıklattırıp popup pencere açılıyor ama orda takipet kısmına bastıramıyorum. Kodlarım aşağıdaki gibi :


     HtmlElementCollection col = webBrowser1.Document.GetElementsByTagName("strong");
                foreach (HtmlElement doc in col)
                {
                    doc.InvokeMember("click");
                    HtmlElementCollection col2 = webBrowser1.Document.GetElementsByTagName("h3");
                    foreach (HtmlElement doc2 in col2)
                    {
                        string x = doc.GetAttribute("class").ToString();
                        if (x == "modal-title")
                        {
                            MessageBox.Show("a");
                            //<span class="button-text follow-text">Takip et <i class="follow"></i></span>
                            HtmlElementCollection col3 = webBrowser1.Document.GetElementsByTagName("span");
                            foreach (HtmlElement doc3 in col3)
                            {
                                
                                string classCek = doc.GetAttribute("class").ToString();
                                if (classCek == "button-text follow-text")
                                {
                                    doc3.InvokeMember("click");
                                }
                            }
    
                            HtmlElementCollection col4 = webBrowser1.Document.GetElementsByTagName("button");
                            foreach (HtmlElement doc4 in col4)
                            {
                                string KapatclassCek = doc.GetAttribute("class").ToString();
                                if (KapatclassCek == "modal-btn modal-close js-close")
                                {
                                    doc4.InvokeMember("click");
                                }
                            }
    
                        }
                    }
                 }
    Amacım burada getattribute kodu ile döngüye alıp gelen değerlerden class kısmını kontrol ettirmeye çalışıyorum eğer gelen veri if ile dediğim kısımında veri ise click ettiriyorum ama boş veri geliyor sanırsam ?
  • 27-05-2013, 10:01:20
    #2
    Arkadaşlar yardım edermisiniz lütfen
  • 27-05-2013, 18:35:58
    #3
    döngünün içeriğinde hata var. mesela
                            foreach (HtmlElement doc3 in col3)
                            {
                                
                                string classCek = doc.GetAttribute("class").ToString();
                                if (classCek == "button-text follow-text")
                                {
                                    doc3.InvokeMember("click");
                                }
                            }
    mesela burada col3 dan doc3 öğesini alıyorsun ama class olarak doc a bakmışsınburada doc3 e bakman gerekmiyor mu?

    senin alt elemanlara inip onların classlarına bakman gerekiyor.. alttaki döngü içinde aynısını yapmışsın. breakpointler koyarak bakabilirsin gelen verilere v.s.
  • 28-05-2013, 09:16:36
    #4
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    döngünün içeriğinde hata var. mesela
                            foreach (HtmlElement doc3 in col3)
                            {
                                
                                string classCek = doc.GetAttribute("class").ToString();
                                if (classCek == "button-text follow-text")
                                {
                                    doc3.InvokeMember("click");
                                }
                            }
    mesela burada col3 dan doc3 öğesini alıyorsun ama class olarak doc a bakmışsınburada doc3 e bakman gerekmiyor mu?

    senin alt elemanlara inip onların classlarına bakman gerekiyor.. alttaki döngü içinde aynısını yapmışsın. breakpointler koyarak bakabilirsin gelen verilere v.s.
    Ben hiç webbrowser tıklatma gibi birşey yapmamıştım. Merak saldım araştırıyorum. Örnek bir kod gönderseniz çok sevinirim
  • 28-05-2013, 13:07:12
    #5
    google arama sistemini değiştirmeden önce şu kod çalışıyordu

     webBrowser1.Document.All["q"].SetAttribute("value", "r10");
     webBrowser1.Document.All["btnG"].InvokeMember("click");
    burada r10 u google da arıyor. all[..] ifadesindekiler nesnelerin id leri.
  • 28-05-2013, 15:59:31
    #6
     string q;
                using (WebClient asd = new WebClient())
                {
                    asd.Encoding = Encoding.UTF8;
                    q = asd.DownloadString("https://twitter.com/search?q=takipedenitakipederim");
                }
                string[] b = q.Split(new string[] { "data-screen-name=\"" }, StringSplitOptions.None);
                foreach (string c in b)
                {
                    string[] d = c.Split('"');
                    listBox1.Items.Add(d[0]);
                }
                listBox1.Items.RemoveAt(0);
                webBrowser1.Navigate("www.twitter.com/" + listBox1.Items[0].ToString());
    webclient ile sayfanın içeriğini çekiyorum.

    sayfanın kaynağındaki;

    data-screen-name="

    her bu değişkende post atanların adlarını çekiyor. yani şu şekilde oluyor;

    twitter.com/data-screen-name=" den dönen id.
    twitter.com/benitakiple gibi direk sayfasına ulaşabiliyosun. bunları listboxa çektiriyorum. daha sonra listboxtaki 0. elemanın yani ilk elemanın linkine şu şekilde gidiyorum;

    webbrowser.navigate("www.twitter.com/"+listbox1.items[0].tostring());

    sayfayı açmış oluyorsun. buradan da takip et butonunun özelliklerini bulup tıklatıcaksın.

    foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("button"))
                {
                    if (el.GetAttribute("type").Equals("button"))
                    {
    
                    }
                }
    4. yada 5. dönen button takip et butonu ama o butonun birka çözelliğini de if in içine eklemen gerekiyor tam bulabilmen için sadece o buton için. yada direk sırasına göre tıklatabilirsin 4. yada 5. buton işte demiştim.

    sonra direk takip etmeye başlarsın zaten. böyle listboxa çek browserde tek tek açtırıp takip ettir bence.
  • 28-05-2013, 21:25:36
    #7
    VoyL adlı üyeden alıntı: mesajı görüntüle
     string q;
                using (WebClient asd = new WebClient())
                {
                    asd.Encoding = Encoding.UTF8;
                    q = asd.DownloadString("https://twitter.com/search?q=takipedenitakipederim");
                }
                string[] b = q.Split(new string[] { "data-screen-name=\"" }, StringSplitOptions.None);
                foreach (string c in b)
                {
                    string[] d = c.Split('"');
                    listBox1.Items.Add(d[0]);
                }
                listBox1.Items.RemoveAt(0);
                webBrowser1.Navigate("www.twitter.com/" + listBox1.Items[0].ToString());
    webclient ile sayfanın içeriğini çekiyorum.

    sayfanın kaynağındaki;

    data-screen-name="

    her bu değişkende post atanların adlarını çekiyor. yani şu şekilde oluyor;

    twitter.com/data-screen-name=" den dönen id.
    twitter.com/benitakiple gibi direk sayfasına ulaşabiliyosun. bunları listboxa çektiriyorum. daha sonra listboxtaki 0. elemanın yani ilk elemanın linkine şu şekilde gidiyorum;

    webbrowser.navigate("www.twitter.com/"+listbox1.items[0].tostring());

    sayfayı açmış oluyorsun. buradan da takip et butonunun özelliklerini bulup tıklatıcaksın.

    foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("button"))
                {
                    if (el.GetAttribute("type").Equals("button"))
                    {
    
                    }
                }
    4. yada 5. dönen button takip et butonu ama o butonun birka çözelliğini de if in içine eklemen gerekiyor tam bulabilmen için sadece o buton için. yada direk sırasına göre tıklatabilirsin 4. yada 5. buton işte demiştim.

    sonra direk takip etmeye başlarsın zaten. böyle listboxa çek browserde tek tek açtırıp takip ettir bence.
    Şimdi sizin kodda sanırsam çok farkı işlemler var. Bana sadece takip etme kodu kısmı lazım . Siz sanırım siteye yönlendirme arama vb. işlemleri yapmışsınız. Ben direkt popup pencere kontrolü ve tklama işlemini yapmak istiyıorum..

    Html kodlarıda aşağıda :
    Bu aşağıdaki kod isim kodu. Yani ismin üzerine tıklattırıyorum onun html kodu :

    <strong class="fullname js-action-profile-name show-popup-with-id">Atkn Ysn Uludağ</strong>
    Aşağıdaki kodda isme tıklayınca gelen popup ekranındaki takip et kısmı :

    <span class="button-text follow-text">
         <i class="follow"></i> Takip et 
        </span>
    Ayrıca ben kodlarımda popup ekranının açılıp açılmadığını kontrol ettirmeye çalıştım. Popup kısmının html koduda aşağıda :

    <h3 class="modal-title">Profil özeti</h3>
    Ayrıca takip et'e bastırdıktan sonra popup pencereyi kapattırmak istiyorum onun html koduda bu :

    <span class="icon close-medium"><span class="visuallyhidden">Kapat</span></span>
  • 28-05-2013, 22:25:50
    #8
    benim yaptığım sayfaya yorum atanların id lerini tek tek çekip her birini açıp takip ettirmekti sen farklı düşünmüşsün anladım.
  • 29-05-2013, 01:39:28
    #9
    VoyL adlı üyeden alıntı: mesajı görüntüle
    benim yaptığım sayfaya yorum atanların id lerini tek tek çekip her birini açıp takip ettirmekti sen farklı düşünmüşsün anladım.
    Sizin dediğiniz daha mantıklı geldi bana şimdi ama sorun şu ki o id'leri gizli bir combobox'a mı çekip takip ettirim. çünkü ben bir tane webbrowser olmasını istiyorum nasıl yapacağım onu. tek browser'dada takip edip geri geldiğimde yeni tweetler gelmiş olacak. ?