एएसपी.नेट वेब पेज पर प्रोग्राम बटन पर बटन कैसे क्लिक करें?

मैं यह समझने की कोशिश कर रहा हूं कि वेब पेज पर एक बटन को प्रोग्रामेटिक रूप से कैसे क्लिक करें।

विशेष रूप से, मेरे पास WebBrowser नियंत्रण वाला WinForm है। एक बार यह लक्ष्य ASP.NET लॉगिन पृष्ठ पर नेविगेट करने के बाद, मैं दस्तावेज़ के पूर्ण कार्य हैंडलर में काम करने की कोशिश कर रहा हूं, मेरे पास निम्न कोड है:

HtmlDocument doc = webBrowser1.Document;

HtmlElement userID = doc.GetElementById("userIDTextBox");
userID.InnerText = "user1";

HtmlElement password = doc.GetElementById("userPasswordTextBox");
password.InnerText = "password";

HtmlElement button = doc.GetElementById("logonButton");
button.RaiseEvent("onclick");

यह उपयोगकर्ता आईडी और पासवर्ड टेक्स्ट बॉक्स को ठीक से भरता है, लेकिन मुझे उस डर्न किए गए बटन को क्लिक करने में कोई सफलता नहीं मिल रही है; मैंने "क्लिक", "क्लिक करें" और "ऑनक्लिक" भी कोशिश की है - और क्या है? पाठ्यक्रम के एमएसडीएन की एक खोज मुझे कोई संकेत नहीं देता है, न ही groups.google.com। मुझे करीब होना चाहिए। या शायद नहीं - किसी ने मुझे बताया कि मुझे पृष्ठ की पोस्ट विधि को कॉल करना चाहिए, लेकिन यह कैसे किया जाता है, यह सलाह का हिस्सा नहीं था।

बीटीडब्ल्यू बटन को कोड किया गया है:

<input type="submit" name="logonButton" value="Login" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="logonButton" tabindex="4" />
0
WebBrowser नियंत्रण (.NET 2.0) का उपयोग करने के लिए यहां एक अच्छा संदर्भ है विभिन्न रूप तत्वों के साथ बातचीत करने के लिए।
जोड़ा लेखक Adam Neal, स्रोत

8 उत्तर

क्या आपने RaiseEvent के बजाय fireEvent की कोशिश की है?

0
जोड़ा

आपने @ फंचक के उत्तर पर क्लाइंट साइड स्क्रिप्ट का उपयोग नहीं करना चाहते हैं, इस लाइन के साथ एक टिप्पणी पोस्ट की है। मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं वह असंभव है। फ़ॉर्म के साथ बातचीत करने का एकमात्र तरीका क्लाइंट साइड स्क्रिप्ट के माध्यम से है। सी # कोड केवल ब्राउज़र को पृष्ठ पर भेजने से पहले क्या होता है इसे नियंत्रित कर सकता है।

0
जोड़ा

There is an example of how to submit the form using InvokeMember here. http://msdn.microsoft.com/en-us/library/ms171716.aspx

0
जोड़ा

var btn = document.getElementById (btnName); अगर (बीटीएन) बीटीएन.क्लिक ();

0
जोड़ा
यह बहुत अच्छा है अगर यह क्लाइंट स्क्रिप्ट की आवश्यकता थी, लेकिन मैं जो करने की कोशिश कर रहा हूं वह सर्वर की तरफ है।
जोड़ा लेखक Cyberherbalist, स्रोत

आप बटन पर क्लिक करने के बजाए सीधे क्लाइंटस्क्रिप्ट के माध्यम से पेज_ClientValidate() विधि को आज़माकर और आज़मा सकते हैं, मुझे एक उदाहरण खोदने दें।

एमएसएचटीएम का उपयोग करना

mshtml.IHTMLWindow2 myBroserWindow = (mshtml.IHTMLWindow2)MyWebBrowser.Document.Window.DomWindow;
myBroserWindow.execScript("Page_ClientValidate();", "javascript");
0
जोड़ा
यह एक समस्या हो सकती है यदि लॉगिन पृष्ठ विशेष रूप से बटन के क्लिक की तलाश करता है
जोड़ा लेखक Jeff Martin, स्रोत
बहुत सच है, मैंने इसके बारे में सोचा था लेकिन फैसला किया कि मैं वैसे भी चालान विधि फेंक दूंगा।
जोड़ा लेखक Quintin Robinson, स्रोत

आप विधि को सीधे कॉल कर सकते हैं और जेनेरिक ऑब्जेक्ट और EventArgs पैरामीटर में पास कर सकते हैं। बेशक, यह काम नहीं कर सकता है अगर आप विशिष्ट डेटा के लिए प्रेषक और EventArgs मानकों को देख रहे थे। मैं आमतौर पर इसे कैसे संभालता हूं, विधि के गलतियों को दोबारा करने के लिए() विधि और बटन क्लिक के लिए ईवेंट हैंडलर बस इस फ़ंक्शन को कॉल करेगा। इस तरह मुझे यह पता लगाने की ज़रूरत नहीं है कि पेज/फॉर्म पर कुछ तर्क करने के लिए आमतौर पर केवल एक ईवेंट हैंडलर क्या होता है।

जावास्क्रिप्ट के किसी फॉर्म पोस्ट के लिए बटन पर क्लिक करने के मामले में, आप क्लाइंट साइड स्क्रिप्ट में form.submit() को आमंत्रित कर सकते हैं - जो कि टैग में परिभाषित आपकी सत्यापन स्क्रिप्ट को चलाएगा - और फिर Form_Load ईवेंट को पार्स करें और उसे पकड़ें उस फॉर्म पर सबमिट बटन का टेक्स्ट वैल्यू (मान लीजिए कि केवल एक ही है) - कम से कम वह एएसपी.नेट 1.1 तरीका है जिसके साथ मैं बहुत परिचित हूं ... किसी को भी 2.0+ के साथ कुछ और सुरुचिपूर्ण पता है?

0
जोड़ा

यह कैसे काम करता है? मेरे लिये कार्य करता है

HtmlDocument doc = webBrowser1.Document;

doc.All["userIDTextBox"].SetAttribute("Value", "user1");
doc.All["userPasswordTextBox"].SetAttribute("Value", "Password!");
doc.All["logonButton"].InvokeMember("Click");
0
जोड़ा

बस एक संभावित उपयोगी अतिरिक्त जहां सबमिट बटन को आईडी नहीं दिया गया है - जैसा कि अक्सर होता है।

    private HtmlElement GetInputElement(string name, HtmlDocument doc) {
            HtmlElementCollection elems = doc.GetElementsByTagName("input");

            foreach (HtmlElement elem in elems)
            {
                String nameStr = elem.GetAttribute("value");
                if (!String.IsNullOrEmpty (nameStr) && nameStr.Equals (name))
                {
                    return elem;
                }
            }
            return null;
    }

तो आप इसे इस तरह से कॉल कर सकते हैं:

 GetInputElement("Login", webBrowser1.Document).InvokeMember("Click");

यदि मूल्य 'लॉगिन' के साथ सबमिट इनपुट है, तो यह अपवाद उठाएगा, लेकिन यदि आप क्लिक को आमंत्रित करने से पहले सशर्त रूप से जांचना चाहते हैं तो आप इसे तोड़ सकते हैं।

0
जोड़ा
मुझे नियंत्रण दस्तावेज स्वीकार करने के लिए थोड़ी सी शरारती और फिर से झुका हुआ महसूस हुआ ताकि यह एक सामान्य कार्य हो।
जोड़ा लेखक MonsCamus, स्रोत