تقييم الموضوع :
  • 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://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();
}
}
والآن ماذا حدث ؟ قمنا بربط حدث اتمام الصفحة بمتغير لا يتم تحويل قيمته إلا بعد الانتهاء من هذه العملية ، ولاحقاً نقوم بعمل 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 ك ب / التحميلات : 88)
}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,626 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,398 22-12-21, 05:09 PM
آخر رد: alessam4pro
  طريقة عمل نسخة لتثبيت فيجوال ستوديو بدون نت معاند الحظ 12 8,086 11-12-21, 04:26 PM
آخر رد: اسلام الكبابى
  [VB.NET] كود تعبئة نموذج فورم في صفحة ويب muad 3 2,003 20-11-21, 03:04 PM
آخر رد: muad
  تنفيذ كود vb.net من خلال مربع نص @@أبورائد@@ 20 14,605 06-10-21, 05:05 PM
آخر رد: الماجيك مسعد
Lightbulb [مقال] التعامل مع ملفات اوفيس من خلال مكتبة NPOI ابو ليلى 2 4,190 01-07-21, 11:42 AM
آخر رد: kebboud
  طريقة تشغيل كريستال ريبورت بجميع ادارات فيجول نت abdhassan 3 7,068 26-02-21, 08:57 PM
آخر رد: علي النقيب
  طريقة إضافة اختصار للصنف في شاشة المبيعات ملهمـ 5 5,905 14-07-20, 12:24 PM
آخر رد: ابراهيم ايبو
Heart [مقال] شرح طريقة معرفة محتوى الكوكيز sooriaty03 5 6,200 11-02-20, 03:18 PM
آخر رد: DK-x
  [VB.NET] سؤال عن طريقة نسخ كل الروابط و اسم الرابط من موقع انترنت toedi 3 3,052 16-01-20, 07:34 AM
آخر رد: toedi

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


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