none
c# webbrowser den veri çekme [yardım] RRS feed

  • Soru

  • merhabalar,

    c# ile otomatik kayıt programı yapmaya çalışıyorum

    string hatalar = webBrowser1.Document.GetElementById("username-error").OuterText;

    mesela bir sitede kullanıcı adına 3 harfli birşey girdim ve bu kod sayesinde bana diyorki kullanıcı adın 4-16 hane olacak

    burda sıkıntı yok.Ben zaten üye olmuş birinin kullanıcı adını girince mesela "deneme123" sitede diyorki bu kullanıcı adı zaten kullanılıyor fakat sıkıntı şuki yazdığım bu kod o yazıyı bana vermesi gerekirsen vermiyo . Elimden geldiğince sıkıntımı anlatmaya çalıştım bilmiyorum daha iyi nasıl anlatırım :) hazır konu açmış iken bunun hakkında ufak birşey daha sormak istiyorum

    webBrowser1.Navigate("https://www.google.com/");
    bununla webbrowserde google açılıyor.Sayfa webbrowsere yüklenince bana mesaj vermesini istiyorum...


    23 Kasım 2016 Çarşamba 17:55

Yanıtlar

  • Merhaba öncelikle yapmak istediğin şey kesinlikle webbrowser için uygun değil

    Kullanıcı Doğrulama sistemi istediğin sistemde şöyle

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.finchvpn.com/ajax/username_available");
    
                request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                request.Accept = "application/json, text/javascript, */*; q=0.01";
                request.Headers.Add("X-Requested-With", @"XMLHttpRequest");
                request.Referer = "https://www.finchvpn.com/register";
                request.Headers.Set(HttpRequestHeader.AcceptLanguage, "tr-TR");
               
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586";
                request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache");
             
                request.Method = "POST";
                request.ServicePoint.Expect100Continue = false;
    
                string body = @"username="+txtUsername.Text;
                byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
                request.ContentLength = postBytes.Length;
                Stream stream = request.GetRequestStream();
                stream.Write(postBytes, 0, postBytes.Length);
                stream.Close();
    
              var  response = (HttpWebResponse)request.GetResponse();
    
                using (Stream stream2 = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream2, Encoding.UTF8);
                    string source = reader.ReadToEnd();
                    if (source == "true")
                        label1.Text = "Uygun";
                    else
                        label1.Text = "Uygun Değil";
                  
                }

    Kullanıcı kayıt ise ama bir token olayı var daha fazla yardımcı olacağım sana ama ancak yarın akşam

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.finchvpn.com/register");
    
    		request.Accept = "text/html, application/xhtml+xml, image/jxr, */*";
    		request.Referer = "https://www.finchvpn.com/register";
    		request.Headers.Set(HttpRequestHeader.AcceptLanguage, "tr-TR");
    		request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586";
    		request.ContentType = "application/x-www-form-urlencoded";
    		request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
    		request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache");
    		request.Headers.Set(HttpRequestHeader.Cookie, @"__cfduid=d33e45cf4a109e01b0e3781527f38a1551479998656; _ga=GA1.2.173702617.1479998656; _gat=1; cf_clearance=33ab26fdeb52c5374214659491f7bcb133caae93-1479998702-900; finchvpn_session=eyJpdiI6IkFHMXp4emsxV2lMbkY3R2w4eFl3Ykt0WXpxV2NxNHRGeENvOHBZVk1ydU09IiwidmFsdWUiOiJURnZpSklIU0hRQ09DNm1ucVBQZXdoSGxyeU9CSTE1OEZFVnVZSERrNms5SzhydGFaUEZDOVJWYlRlcVBoQWhyc2JlMm1EWXF1NHgzTUd4UG84amIwUT09IiwibWFjIjoiZjBhNDNkMTE4NzYwZjliYzdhOTM5NTQyMTQyMzBlYjE4ZWU5MzAzOTdmNjM5NzEwYTE0OWJhNjZkYTk2NmMzYSJ9");
    
    		request.Method = "POST";
    		request.ServicePoint.Expect100Continue = false;
    
    		string body = @"username=projman&password=2222&password_confirmation=2222&email=rasim.serif.balkan%40outlook.com&email_confirm=rasim.serif.balkan%40outlook.com&_token=JuGrwYSUKjdMydr5T5Z4Khgf8HSAcpOaK0jvvtYE&submit=Register";
    		byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
    		request.ContentLength = postBytes.Length;
    		Stream stream = request.GetRequestStream();
    		stream.Write(postBytes, 0, postBytes.Length);
    		stream.Close();
    
    		response = (HttpWebResponse)request.GetResponse();
    

    24 Kasım 2016 Perşembe 15:08

Tüm Yanıtlar

  • Merhaba Sorunun çözümü aşağıda yer almaktadır.Kodlar aşağıdaki link içinde WebbrowserProjesi olarak mevcut her türlü soruyu sorabilirsin

    Ama benim tavsiyem Fiddler2 programını ve Code eklentisini araştırmandır.

    http://bit.ly/rasimmsdn

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WebbrowserProjesi
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                webBrowser1.DocumentCompleted +=
          new WebBrowserDocumentCompletedEventHandler(EnterUsername); // sayfa yüklendikten sonra event in tetikleyeceği method
    
                webBrowser1.Navigate("http://kaynakyazilim.com/members/logon/");
            }
    
           
    
            private void btnGiris_Click(object sender, EventArgs e)
            {
                var links = webBrowser1.Document.GetElementsByTagName("button"); 
                foreach (HtmlElement link in links)
                {
                    if (link.GetAttribute("className") == "btn-mvc-green btn-mvc-large")
                    {
                        webBrowser1.DocumentCompleted -=
        new WebBrowserDocumentCompletedEventHandler(EnterUsername); // Kullanıcı adı ve şifreyi girdiğimiz event i etkisizleştirdik
    
                        webBrowser1.DocumentCompleted +=
         new WebBrowserDocumentCompletedEventHandler(GetH3); // şimdi butona basıldıktan sonra gelen sayfa için bir event hazırladık bu event methodu bize loginden sonraki gelen sayfa içerisindeki h3 taglarının içindeki InnerText leri verecek.
    
                        link.InvokeMember("click"); // butona click yağtırdık.
    
    
                    }
                }
    
          
            }
    
            private void EnterUsername(object sender,
       WebBrowserDocumentCompletedEventArgs e)
            {
                if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath) // sayfamızın yönlendiği url ile browser üzerindeki url eşit değil ise sonraki kodları çalıştırma bu önemli
                    return;
                
    
                webBrowser1.Document.GetElementById("UserName").InnerText = txtUsername.Text; // gerekli alanlara kullaıcı adı ve şifre gir.
                webBrowser1.Document.GetElementById("Password").InnerText = txtPassword.Text;
            }
            private void GetH3(object sender,
       WebBrowserDocumentCompletedEventArgs e)
            {
                if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
                    return;
    
                listBox1.Items.Clear();
                var links = webBrowser1.Document.GetElementsByTagName("h3"); // yüm h3 lerin içinde döneceğiz.
                foreach (HtmlElement link in links)
                {
                    listBox1.Items.Add(link.InnerText); // her dönüşte elemanı ekledik.
                }
                webBrowser1.DocumentCompleted -=
    new WebBrowserDocumentCompletedEventHandler(GetH3);
            }
        }
    }



    23 Kasım 2016 Çarşamba 21:54
  • bunları tek tek senmi yazdın :D çok güzel ve açıklayıcı olmuş teşekkür ederim 

    ve denedim ama istediğim bu değil 

       private void Form1_Load(object sender, EventArgs e)
            {
                webBrowser1.DocumentCompleted +=
          new WebBrowserDocumentCompletedEventHandler(EnterUsername); // sayfa yüklendikten sonra event in tetikleyeceği method
    
                webBrowser1.Navigate("http://kaynakyazilim.com/members/logon/");
            }

    sen bu kodu form loada ekliyosun hata vermiyo ama benim bunu buttona yazmam gerekiyor yani buttona tıkladığımda sayfa yüklenip kodlar filan çalışıyo tabi sayfa yavaş yüklendiği içinde hata veriyo o yüzden sayfa yüklendikten sonra kodların çalışmasını istemiştim

    birde bu siteye gir usernameye "123123" yaz ve hemen alta "That username is already taken, Please choose another username." yazıyor ama benim programımda bu yazı yazmıyo.Asıl derdim bu :D nasıl yazmaz hayır yani username yerine 123 yazınca programda 4-16 harf girin yazıyo ama 123123 yazınca o yazı yazmıyo değişik :)

    24 Kasım 2016 Perşembe 13:26
  • Merhaba öncelikle yapmak istediğin şey kesinlikle webbrowser için uygun değil

    Kullanıcı Doğrulama sistemi istediğin sistemde şöyle

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.finchvpn.com/ajax/username_available");
    
                request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                request.Accept = "application/json, text/javascript, */*; q=0.01";
                request.Headers.Add("X-Requested-With", @"XMLHttpRequest");
                request.Referer = "https://www.finchvpn.com/register";
                request.Headers.Set(HttpRequestHeader.AcceptLanguage, "tr-TR");
               
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586";
                request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache");
             
                request.Method = "POST";
                request.ServicePoint.Expect100Continue = false;
    
                string body = @"username="+txtUsername.Text;
                byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
                request.ContentLength = postBytes.Length;
                Stream stream = request.GetRequestStream();
                stream.Write(postBytes, 0, postBytes.Length);
                stream.Close();
    
              var  response = (HttpWebResponse)request.GetResponse();
    
                using (Stream stream2 = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream2, Encoding.UTF8);
                    string source = reader.ReadToEnd();
                    if (source == "true")
                        label1.Text = "Uygun";
                    else
                        label1.Text = "Uygun Değil";
                  
                }

    Kullanıcı kayıt ise ama bir token olayı var daha fazla yardımcı olacağım sana ama ancak yarın akşam

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.finchvpn.com/register");
    
    		request.Accept = "text/html, application/xhtml+xml, image/jxr, */*";
    		request.Referer = "https://www.finchvpn.com/register";
    		request.Headers.Set(HttpRequestHeader.AcceptLanguage, "tr-TR");
    		request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586";
    		request.ContentType = "application/x-www-form-urlencoded";
    		request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
    		request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache");
    		request.Headers.Set(HttpRequestHeader.Cookie, @"__cfduid=d33e45cf4a109e01b0e3781527f38a1551479998656; _ga=GA1.2.173702617.1479998656; _gat=1; cf_clearance=33ab26fdeb52c5374214659491f7bcb133caae93-1479998702-900; finchvpn_session=eyJpdiI6IkFHMXp4emsxV2lMbkY3R2w4eFl3Ykt0WXpxV2NxNHRGeENvOHBZVk1ydU09IiwidmFsdWUiOiJURnZpSklIU0hRQ09DNm1ucVBQZXdoSGxyeU9CSTE1OEZFVnVZSERrNms5SzhydGFaUEZDOVJWYlRlcVBoQWhyc2JlMm1EWXF1NHgzTUd4UG84amIwUT09IiwibWFjIjoiZjBhNDNkMTE4NzYwZjliYzdhOTM5NTQyMTQyMzBlYjE4ZWU5MzAzOTdmNjM5NzEwYTE0OWJhNjZkYTk2NmMzYSJ9");
    
    		request.Method = "POST";
    		request.ServicePoint.Expect100Continue = false;
    
    		string body = @"username=projman&password=2222&password_confirmation=2222&email=rasim.serif.balkan%40outlook.com&email_confirm=rasim.serif.balkan%40outlook.com&_token=JuGrwYSUKjdMydr5T5Z4Khgf8HSAcpOaK0jvvtYE&submit=Register";
    		byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
    		request.ContentLength = postBytes.Length;
    		Stream stream = request.GetRequestStream();
    		stream.Write(postBytes, 0, postBytes.Length);
    		stream.Close();
    
    		response = (HttpWebResponse)request.GetResponse();
    

    24 Kasım 2016 Perşembe 15:08
  • çok teşekkür ederim kullanıcının olup olmadığını anlıyo 

    açıkcası bu programı hiç webbrowser kullanmadan yapmak istiyordum ve işin komik kısmı yapılmıyo sanıyordum :D nasıl yapılacağını biraz araştırıyım.Yarın akşamı bekliyo olacam.Hocam aslında facebooktan ekliyip konuşabilirsek çok daha makbule geçer :)

    facebook

    söylemeyi unuttum webbrowserden sayfa yüklendikten sonra işlem yaptırma nasıl oluyor 


    • Düzenleyen presy58 24 Kasım 2016 Perşembe 15:48
    24 Kasım 2016 Perşembe 15:47
  • Facebook üzerinden iletişime geçmiyorum burada herşeyi paylaşalımki diğer ihtiyaç sahipleride faydalansınlar.

    Sorunun cevabı yukarıdaki kodlarda var 

    if içindeki koşul sayfa yüklendiğinde işlemlerin devam etmesine izin verir.

      if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
                    return;

            WebBrowserDocumentCompletedEventArgs e)
            {
                if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
                    return;
    
                listBox1.Items.Clear();
                var links = webBrowser1.Document.GetElementsByTagName("h3"); // yüm h3 lerin içinde döneceğiz.
                foreach (HtmlElement link in links)
                {
                    listBox1.Items.Add(link.InnerText); // her dönüşte elemanı ekledik.
                }
                webBrowser1.DocumentCompleted -=
    new WebBrowserDocumentCompletedEventHandler(GetH3);
            }

    26 Kasım 2016 Cumartesi 19:47