تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
درس مترجم - طريقة الكتابة في صفحة الإنترنت والضغط على الأزرار من خلال برنامجك آليا
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .

مقال منقول ومترجم بتصرف من موقع 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( )
حيث يتم لاحقاً عمل parsing (تقسيم وتحليل - لم أجد ترجمة مناسبة ولكنها باختصار العملية التي اقوم من خلالها بتقسيم كود HTML لاستطيع فهم جزء معين منه) لكود ال HTML ، ويتم ذلك من خلال البحث عن الأزرار ومربعات النص وخلافه ومعرفة اسماءها وأمكانها ، وبهذه الطريقة يمكنه انشاء زر أمر أو رابط يقوم من خلاله تنفيذ أوامر معينة .

أما نحن في هذه المقالة فنحاول الوصول إلى طريقة أخرى باستخدام الفئة 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);
}
*** لن أستمر في التحويل إلى VB.net ويمكنك مراجعة هذا الدرس لمزيد من التفاصيل :
http://vb4arb.com/vb/showthread.php?1054

هناك نقطة هامة ينبه عليها الكاتب وهي ان عملية فتح صفحة هي عملية لاتزامنية 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();
}
}
والآن ماذا حدث ؟ قمنا بربط حدث اتمام الصفحة بمتغير لا يتم تحويل قيمته إلا بعد الانتهاء من هذه العملية ، ولاحقاً نقوم بعمل Sleep متكرر للبرنامج حتى يتم الانتهاء الكلي من تحميل الصفحة .

طريقة الضغط على زر أمر Button :
نقوم اولاً بتحميل الصفحة في المتصفح ، ثانياً نقوم بمعرفة الزر باسمه من خلال WebBrowser.HtmlElementCollection وأخيراً نقوم بعمل Casting للزر باستخدام الواجهة الخاصة بـ MSHTML المسماه HTMLInputElementClass بالشكل التالي :


كود :
HTMLInputElementClass iElement = (HTMLInputElementClass) button.DomElement;
iElement.click();
طريقة الضغط على رابط Link :
نفس الطريقة السابقة ما عدا اختلاف وجهة عملية ال Cast :

كود :
HTMLAnchorElementClass linkElement =
(HTMLAnchorElementClass) linkToClick.DomElement;
linkElement.click();
طريقة ادخال بيانات في مربع نص textBox :
كما اعتدنا سوف نقوم بأخذ مربع النص من HtmlElement ، ومن ثم نقوم باسناد خاصية نص له بالشكل التالي :

كود :
element.InnerText = valueToFill;
طريقة الضغط على زر اختيار radioButton :

كود :
HTMLInputElementClass iElement =
(HTMLInputElementClass)radioToSelect.DomElement;
iElement.@checked = true;
ولاختيار عنصر من قائمة :

كود :
HTMLSelectElementClass iElement =
(HTMLSelectElementClass) dropdown.DomElement;
iElement.value = value;
ولحفظ صفحة الويب كصورة snapshot :

كود :
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

والله الموفق ..
والسلام عليكم ورحمة الله وبركاته .


الملفات المرفقة
.zip   autmatic web browsing.zip (الحجم : 21.21 ك ب / التحميلات : 71)
}}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم