03-10-12, 02:11 PM
كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم .مقال منقول ومترجم بتصرف من موقع Code Project من الرابط التالي :
http://www.codeproject.com/cs/sample...ebbrowsing.asp
بعنوان : Automating web browsing
By mitja g.
والكلام باللون الأخضر قمت انا باضافته للتوضيح وليس من أصل المقال ، مع تحويل للكود ليتم عرضه بكل من C# و VB.net في البداية للتوضيح فقط والطريقة المفترض انها اصبحت معروفة للجميع .
مقدمة :
في هذه المقالة أحاول أن أقدم امكانية لعمل autmate للمهام التي ننفذها باستخدام الماوس والكيبورد - لوحة المفاتيح- ، وهذا يمكن أن يعني : فتح الصفحة ، ادخال البيانات في صندوق نصوص مثلاً ومن ثم الضغط على زر ، ولاحقاً يمكن تطوير هذه المهام بحيث تشمل مهام أكثر تعقيداً تتضمن البحث في الويب وغير ذلك مما يمكن أن تستخدمها كأدوات لاختبار تطبيق الويب الخاص بك .
- توضيح : يقصد المؤلف انه سيحاول من خلال هذا البرنامج نقل البيانات من برنامج عادي إلى ويب ، مثلاً في حالة اضافة موضوع جديد في المنتدى فإنك تقوم بالضغط على رابط ، ثم كتابة بعض الكلمات ومن ثم الضغط على زر ، ويهدف الكاتب في هذه المقالة إلى عمل ذلك على برنامج خارجي يتولى هو لاحقاً القيام بهذه المهمات آلياً على صفحة الإنترنت .
وبشكل عام فإن الطريقة العامة لمعالجة البيانات تعتمد على مبدأ مثل هذا :
كود :
//C#:
WebRequest req = WebRequest.Create("[url=http://www.codeproject.com/]www.codeproject.com[/url]");
WebResponse res = req.GetResponse( );
'VB.net:
Dim req as WebRequest = WebRequest.Create("[url=http://www.codeproject.com/]www.codeproject.com[/url]")
Dim res as WebResponse = req.GetResponse( )
أما نحن في هذه المقالة فنحاول الوصول إلى طريقة أخرى باستخدام الفئة Class المسمى باسم WebBrowser في .net وهو ما سينتج اختلافاً حيث أننا لا نتعامل مع Request-Respones مثلما سبق ، بل نتعامل مع ملفات نصية txt files من خلال أداة WebBrowser حيث نستطيع التعامل من خلال high level حيث تكون الأمورأسهل ، حيث لن نضطر لعمل كل العمليات السابقة بل سوف نتعامل مع مربعات النص textboxes والأزرار Buttons على أنها كائنات Objects بالشكل التالي :
كود :
//C#:
Button btn = browser.ReturnElementByName(“myButton”);
btn.Click();
'VB.net:
Dim btn as Button = browser.ReturnElementByName(“myButton”)
btn.Click()
ال ActicX الخاص بـ WebBrowser هو في الواقع instance أو نسخة من متصفح الاكسبلورر الخاص بك يتمتع بكافة مميزاته ومشاكله أيضاً . وتتم جميع الاتصالات مع هذه الأداة من خلال مكتبة اسمها MSHTML والتي لديها واجهة Interface مع كل الأدوات التي يمكن تضمينها في صفحة الويب ، وهذه المكتبة موجودة في جميع اصدارات ويندوز .
ومبدئياً فإنك تستطيع قراءة الكائنات Objects وتحويلها إلى الواجهة التي تريدها ، ولكن هذا يكون صعباً إذا لم تكن تعرف الواجهة المراد التحويل إليها .
استخدام الكود :
طريقة فتح جديد :
كود :
public string OpenPage(WebBrowser browser, string urlToLoad)
{
browser.Navigate(urlToLoad);
}
http://www.vb4arab.com/vb/showthread.php?t=782
هناك نقطة هامة ينبه عليها الكاتب وهي ان عملية فتح صفحة هي عملية لاتزامنية asynchronous ولهذا لن تستطيع معرفة موعد انتهاء فتح الصفحة ، ولذا فإن الكود الخاص بنا لا بد أن ينتظر حتى يتم تحميل الصفحة بالكامل :
كود :
public string OpenPage(WebBrowser browser, string urlToLoad){
bool loadFinished = false;
browser.DocumentCompleted += delegate { loadFinished = true; };
browser.Navigate(urlToLoad);
while (!loadFinished && counterTimeOut > 0){
Thread.Sleep(100);
Application.DoEvents();
}
}
طريقة الضغط على زر أمر Button :
نقوم اولاً بتحميل الصفحة في المتصفح ، ثانياً نقوم بمعرفة الزر باسمه من خلال WebBrowser.HtmlElementCollection وأخيراً نقوم بعمل Casting للزر باستخدام الواجهة الخاصة بـ MSHTML المسماه HTMLInputElementClass بالشكل التالي :
كود :
HTMLInputElementClass iElement = (HTMLInputElementClass) button.DomElement;
iElement.click();
نفس الطريقة السابقة ما عدا اختلاف وجهة عملية ال Cast :
كود :
HTMLAnchorElementClass linkElement =
(HTMLAnchorElementClass) linkToClick.DomElement;
linkElement.click();
كما اعتدنا سوف نقوم بأخذ مربع النص من HtmlElement ، ومن ثم نقوم باسناد خاصية نص له بالشكل التالي :
كود :
element.InnerText = valueToFill;
كود :
HTMLInputElementClass iElement =
(HTMLInputElementClass)radioToSelect.DomElement;
iElement.@checked = true;
كود :
HTMLSelectElementClass iElement =
(HTMLSelectElementClass) dropdown.DomElement;
iElement.value = value;
كود :
Rectangle rec = new Rectangle();
rec.Offset(0, 0);
rec.Size = browser.Document.Window.Size;
Bitmap bmp = new Bitmap(rec.Width, rec.Height);
browser.DrawToBitmap(bmp, rec);
bmp.Save(“file.path”, ImageFormat.Jpeg);
http://www.codeproject.com/cs/sample...owsing_src.zip
تجد رابط للسورس كود لجميع العمليات سابقة الذكر ، كما تجد هنا الرابط التنفيذي مباشرة :
http://www.codeproject.com/cs/sample...wsing_demo.zip
لا بد ان تكون عضواً في Code Project لتتمكن من تنزيل البرنامج ، وهو ما انصح اخواني به حيث انه يعد من أكبر الموسوعات العالمية في البرمجة كما ان البرنامج في المرفقات لغير الأعضاء يمكنهم تحميله مباشرة.
نبذة عن كاتب الموضوع :
الاسم : mitja g
المكان : Slovenia
والله الموفق ..
والسلام عليكم ورحمة الله وبركاته .