2013-04-25 7 views
5

के माध्यम से तत्व नाम और आईडी प्राप्त करने के लिए वेबसाइट को स्क्रैप करना Textarea जानकारी प्राप्त करने के लिए मैं a website को स्क्रैप करने की कोशिश कर रहा हूं।सी # वेब ब्राउज़र

मैं उपयोग कर रहा हूँ:

HtmlDocument doc = this.webBrowser1.Document; 

जब मैं स्रोत देखें देखो यह <textarea name="message" class="profile">

से पता चलता लेकिन जब मैं के साथ इस पाठ क्षेत्र तक पहुँचने का प्रयास:

HtmlDocument doc = this.webBrowser1.Document; 

doc.GetElementsByTagName("textarea") 
     .GetElementsByName("message")[0] 
     .SetAttribute("value", "Hello"); 

इससे पता चलता है त्रुटि:

Value of '0' is not valid for 'index'. 'index' should be between 0 and -1. 
Parameter name: index 

कोई मदद?

+3

POF उपयोग की शर्तों scraping अनुमति नहीं है। – albattran

+0

अपने डीबगर का उपयोग करें और कोड के माध्यम से कदम। 'Doc.GetElementsByTagName (.... 'लाइन पर ब्रेक पॉइंट डालें। फिर' GetElementsByTagName (" textarea ") 'टुकड़ा' द्वारा वापस लौटाए जाने का निरीक्षण करें। क्या इसमें 'message' तत्व' है? क्या यह एक सरणी है या बस एक तत्व। – NotMe

+0

@ChrisLively मैं प्रेषक {संदेश} और आधार {संदेश} देखता हूं? – IceDawg

उत्तर

2

अपने वर्तमान के लिए की जरूरत है तो आप बस इस का उपयोग कर सकते हैं:

doc.GetElementsByTagName("textarea")[0].InnerText = "Hello"; 

जटिल चीजों के लिए आप MSHTML वर्ग के साथ HtmlDocument वर्ग का उपयोग कर सकते हैं।

+0

@ skumar मुझे अभी भी एक ही त्रुटि मिलती है – IceDawg

+0

@ skumar क्या हम चैट कर सकते हैं? – IceDawg

1

मैं आपको HtmlAgilityPack सौंप सकता हूं!

मुझे लगता है कि आप यह सोचने के लिए कुकीज़ का उपयोग करने वाली वेबसाइट तक पहुंचने का प्रयास करते हैं कि कोई उपयोगकर्ता लॉग इन है (या नहीं)। यदि नहीं, तो यह आपको पंजीकरण/लॉग-इन करने के लिए मजबूर करेगा अन्यथा आपको कुछ भी देखने की अनुमति नहीं है। क्या मैं सही हू?

आपका ब्राउज़र उस कुकीज़ को संग्रहीत करता है, आपका सी # नहीं करता है! (व्यापक रूप से बोलते हुए)
आपको उस समस्या को हल करने के लिए कुकी कंटेनर बनाने की आवश्यकता है।

आपका सी #-ऐप लॉग-इन कर सकता है, कुकी/सत्र का अनुरोध कर सकता है, प्रतिक्रियाकर्ता से कुकीज़ ले सकता है और फिर आप प्रोफाइल या जो कुछ भी चाहते हैं उसे स्क्रैप करने में सक्षम होना चाहिए।
पोस्ट डेटा प्राप्त करें, जो सर्वर को भेजता है। आप टूल्स/एडॉन्स जैसे Fiddler, टैपर, ect ..

E.g. का उपयोग कर सकते हैं। PostdataString: user_name = testuser & पासवर्ड = TESTPASSWORD & भाषा = hi & कार्रवाई% 3Asubmit = सबमिट करें

यहाँ एक टुकड़ा का उपयोग कर सकते है।

 //Create the PostData 
     string strPostData = "user_name=" + txtUser.Text + "&password=" + txtPass.Text + "&language=en&action%3Asubmit=Submit"; 
     CookieContainer tempCookies = new CookieContainer(); 
     ASCIIEncoding encoding = new ASCIIEncoding(); 
     byte[] data = encoding.GetBytes(strPostData); 

     //Create the Cookie 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.website.com/login.php"); 
     request.Method = "POST"; 
     request.KeepAlive = true; 
     request.AllowAutoRedirect = false; 
     request.Accept = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.Referer = "http://www.website.com/login.php"; 
     request.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1"; 
     request.ContentLength = data.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(data, 0, data.Length); 

     HttpWebResponse response; 
     response = (HttpWebResponse)request.GetResponse(); 
     string sRequestHeaderBuffer = Convert.ToString(response.Headers); 

     requestStream.Close(); 

     //Stream(-output) of the new website 
     StreamReader postReqReader = new StreamReader(response.GetResponseStream()); 

     //RichTextBox to see the new source. 
     richTextBox1.Text = postReqReader.ReadToEnd(); 

आपको बीच में कुकी-पैरामीटर समायोजित करने और कोड के साथ-साथ अपने वर्तमान सत्र को जोड़ने की आवश्यकता होगी। यह आपके द्वारा देखी गई अनुरोधित वेबसाइट पर निर्भर करता है।
उदा .:

 request.Headers.Add("Cookie", "language=en_US.UTF-8; StationID=" + sStationID + "; SessionID=" + sSessionID); 
+1

मैं anythjing समझ में नहीं आता – IceDawg

संबंधित मुद्दे