2010-08-13 14 views
6

सी # दृश्य स्टूडियो 2010एक WebBrowser नियंत्रण में एक WebBrowser नियंत्रण

मैं एक जटिल html पृष्ठ लोड हो रहा है कर रहा हूँ अंदर एक HTML लिंक क्लिक करें। लेकिन, मेरे पास वेबपृष्ठ को संशोधित करने की क्षमता नहीं है। मैं विंडोज़ फॉर्म से स्वचालित रूप से पेज पर एक लिंक पर क्लिक करना चाहता हूं। लेकिन, पृष्ठ लोड होने पर हर बार यादृच्छिक रूप से जेनरेट किया जाता है (इसलिए मुझे लगता है कि आईडी का संदर्भ नहीं होगा)।

यह एक href लिंक के सामग्री:

<a 

id="u_lp_id_58547" href="javascript:void(0)" class="SGLeftPanelText" onclick="setStoreParams('cases;212', 212); window.leftpanel.onClick('cases_ss_733');return false; ">

My Assigned</a> 

वैसे भी सी # से लिंक पर क्लिक करें है?

धन्यवाद!


अद्यतन:

मैं इस तरह लग रहा है करीब है, लेकिन यह सिर्फ काम कर रहा है नहीं:

HtmlElementCollection links = helpdeskWebBrowser.Document.Window.Frames["main_pending_events_frame"].Document.GetElementsByTagName("a"); 
MessageBox.Show(links.Count.ToString()); 

मैं कोशिश की है हर एक फ्रेम नाम में प्लग लगाने और कोशिश की दोनों "एक" और टैगनाम फ़ील्ड में "ए" लेकिन बस कोई भाग्य नहीं है। मुझे कोई लिंक नहीं मिल रहा है; संदेश बॉक्स हमेशा होता है 0. मुझे क्या याद आ रही है?

उत्तर

17

इस तरह काम करना चाहिए:

HtmlElement link = webBrowser.Document.GetElementByID("u_lp_id_58547") 
link.InvokeMember("Click") 

संपादित करें:

के बाद से आईडी बेतरतीब ढंग से उत्पन्न कर रहे हैं, एक और विकल्प उनके InnerText से लिंक की पहचान करने हो सकता है; इन रेखाओं के साथ - साथ।

HtmlElementCollection links = webBrowser.Document.GetElementsByTagName("A"); 

foreach (HtmlElement link in links) 
{ 
    if (link.InnerText.Equals("My Assigned")) 
     link.InvokeMember("Click"); 
} 

अद्यतन:

आप का उपयोग कर एक IFrame के भीतर लिंक प्राप्त कर सकते हैं:

webBrowser.Document.Window.Frames["MyIFrame"].Document.GetElementsByTagName("A"); 
+0

लेकिन सवाल कहता है "लेकिन, आईडी लोड होने पर प्रत्येक बार यादृच्छिक रूप से उत्पन्न होता है (इसलिए मेरा मानना ​​है कि आईडी का संदर्भ नहीं होगा)।" –

+0

जॉन, आप सही हैं - जब भी आप पेज खोलते हैं तो लिंक उन्हें यादृच्छिक संख्या प्राप्त करते हैं। यह तरीका है जो मैं अपनी खोजों में पूरा करता रहता हूं लेकिन आईडी का उपयोग किए बिना इसे लागू करने का कोई और तरीका नहीं समझ सकता। 'case_ss_733' हमेशा एक जैसा है, मुझे नहीं पता कि इसका उपयोग कैसे किया जा सकता है। – Josh

+0

@ जॉन। हां आप सही हैं, लेकिन यादृच्छिक रूप से जेनरेट आईडी आईडी को मेरी प्रारंभिक प्रतिक्रिया के बाद जोड़ा गया था। @ जोश। क्या आप इनरटेक्स्ट मान द्वारा लिंक की पहचान कर सकते हैं? – Garett

1

शायद आप ही आसपास के एचटीएमएल संदर्भ से अधिक का उपयोग करते हुए लिंक आईडी मूल्य को अलग करना होगा एक "लक्ष्य" और फिर नई यादृच्छिक आईडी निकालें।

अतीत में मैंने "HtmlAgilityPack" का उपयोग आसानी से "स्क्रीन-स्क्रैप" एचटीएमएल को किसी पृष्ठ के भीतर रुचि के क्षेत्रों को अलग करने के लिए किया है - यह लाइब्रेरी उपयोग और विश्वसनीय होने में आसान प्रतीत होती है।

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