الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

تم تحميل الصفحة في 0,7901860 ثانية
الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113


|[ -------------------------------------------------------------------------------------------------------------- ]|

اهــلاً وســهــلاً بـــكـــم اخـــوانى واحبائى فى الله مراقبين اداريين مشرفيين وفريق عمل واعضاء و زوار هذا الموقع العريق والصرح العظيم الذى تعلمت منه ومن اعضائه

الكثير والكثير والذى مهما قدمت من مواضيع وشروحات لن اوفى حقكم علىً وفضلكم بعد الله سبحانه وتعالى

مـــــــقـــــــدمـــة



التعامل مع المواقع و صفحات الويب امر ممتع جداً وشيق وابداعى لان كل موقع يختلف عن الاخر وله طريقة معينه فى التعامل معه وهنا يكمن الابداع و هو امر اساسى لاى مبرمج يجب ان يتعلمه

وهناك الكثير من الطرق للتعامل مع هذا الامر منها ما سوف اشرحه فى هذا الموضوع الـ WebBrowser والـ System.Net.WebClient

ولكن اتطرق الى ايهما افضل - بالطبع الـ WebClient افضل - ولكنى افضل الـ WebBrowser لانه سهل جدا فى التعامل معه وبسيط

وفــى هــذا الـــمـــوضوع ان شاء الله سوف احاول على قدر معلوماتى البسيطة والمتواضعة ان اشرح لكم هذه الاداة ( WebBrowser ) وبعض دواله واحداثه المهمة وبعض الامور المهمة التى نحتاجها فى تعاملنا مع اى موقع



الـــــــــفــــــــــهـــــــــرس





  • اهـــــــــم دوال الــ WebBrowser والاحداث

  • جـــــلـــــب ( احضار ) نــص مــعـين من صــفـــحـــة ويـــــب

  • ارســـــــال نـــص الـــى حقل مـــعــــين فـــى صــــفــــحـــة ويــــــب

  • الـــضــــغـــط عــــلــــى الازرار

  • جـــلــــب ( احضار ) صــــــورة مـــعـــيــــنـــة مــن صـــفــــحة ويـــــب ( كابتشا )







 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

مـــــــــقـــــــدمـــــــــة عــن الـ WebBrowser و صــفـــحـــات الــويـــب



اولاً خلفية عن الـ Html سوف تكون جيدة ورائعة جداً وعدمها لن يضر نبدأ معاً لتثبيت بعض المفاهيم التى سنتعامل معها كثيراً قادماً

Target :- الهدف هو الموقع او صفحة الويب التى نتعامل معها

HtmlElement:- هو عنصر Html موجود فى الموقع الهدف قد يكون زر Button او قد يكون صندوق نص TextBox او اى شىء


TagName:- الوسم تسطيع ان تعتبره GroupBox كما فى الـ Net. فهو يضم عدة عناصر HtmlElements

Document :- هى الصفحة الحالية الموجودة او المفتوحة فى الـ WebBrowser وتضم جميع الـ HtmlsElements و الـ TagNames

InvokeMember :- قد يكون البعض يستخدمها نسخ ولص او حتى دون فهما وكل ما يعرفه عنها هو هذا الكود

كود Visual Basic
WebBrowser1.Document.GetElementById("YYY").InvokeMember("click")


الكود صحيح ولكن اقصد بان كل يظن بانها تستخدم للضغط على العناصر فقط ولكن لنفهم
Invoke تعنى استدعاء او طلب و Member تعنى حرفيا عضو ولكنها هنا تعنى Method والتى تعنى حدث ( حرفياً تعنى طريقة ) ليس هذا مهم المهم انها
تستخدم هذه الطريقة لاستدعاء حدث معين لاى عنصر

لتوضيح الامر خذ هذا المثال على الـ VB.Net
لكل الادوات احداث معينة مثل الـ Button جميعنا تعودنا على حدث click فقط وصحيح هو الحدث الاساسى والرئيسى ولكن هذا لا يعنى انه الوحيد فيوجد احداث اخرى كثيرة



Attribute :- سمة او صفة للعنصر قد تكون صفة فريدة تميزه او صفة عادية تشترك فى جميع العناصر

لتوضيح الامر خذ هذا المثال على الـ VB.Net

الخاصية Name لاى عنصر هى خاصية فريدة فلا تستطيع اضافة اداتين بنفس الاسم فى المشروع بينما الخاصية Font مثلا ليست كذلك يمكنك جعل جميع العناصر لها نفس الـ
Font



هذه كانت اهم والثوابت التى سنتعامل معها فى الردود التالية وهناك الكثير سوف نتعرف عليه جزء جزء عندما نحتاجه وياتى دوره :637483:




يتبع فى الرد القادم باذن الله :dv (2): :157:


 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

استكمال للرد السابق اساسيات التعامل مع صفحات الويب



الان نتعلم اهم شىء فى شرحنا وهو كيفية فحص عنصر فى صفحة ويب معينة لانها اساسية ومهمة جداً فهى ما نبنى عليه اكوادنا

ينصح باستخدام متصفح FireFox



1- نضغط كليك يمين على العنصر الذى نريده ونختار Inspect Element




2- يظهر لنا الـ Inspector Window كما فى الصورة



فى الـ Inspector تلاحظ وجود الكثير من خصائص العنصر وسماته هذا العنصر فى الصورة عنصر مباشر اى له Id تستطيع التعامل معه بسهولة تامة

ملاحظة ايضا النص او الاكواد هذه هى نفسها ايضا الـ OuterHtml الخاصة بالعنصر

انتهى

استراحة اشرب كوباية شاى لانى جالس من الصبح على الكمبيوتر :637483: :dv (8):

ونعود فى الرد القادم مع استخراج النصوص



 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

اســــتــــخـــراج الـــــنــــــصـــــوص



نبدأ على بركة الله كيفية استخراج النصوص من موقع معين بالطريقة المباشرة او الغير مباشرة

تنويه مهم جداً الشرح فى هذا الجزء اعتمدت على دوال الاساسية للتعامل مع النصوص على الرغم انه يوجد طريقة افضل بكثير وهى الـ Regex ولكن للاسف لا اجيدها ولكن انصح الجميع بتعلمها



اولا استخراج النصوص بالطريقة المباشرة

المقصود بها انه عندما يكون العنصر الذى يحتوى على النص الذى نريد استخراجه يحمل ID مميز وفى هذه الحالة يكون الكود بسيط جدا كالتالى

كود Visual Basic
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim WantedText As String = WebBrowser1.Document.GetElementById("Id").InnerText
    End Sub


Document : هى كل محتويات الـ WebBrowser الحالى من ازرار Buttons او نصوص Texts او اى شىء فهى كل الـ HtmlElements الموجودة فى صفحة الويب

GetElementById : نقوم بالوصول الى العنصر الذى نريده من كل هذه العناصر الموجودة فى Document من خلال اسم هذا العنصر

Id : هو الاسم المميز للعنصر حتى يتعرف عليه البرنامج

InnerText : النص الموجود داخل العنصر

كل ما عليك فقد كتابة الـ Id الخاص بالعنصر بعد استخراجه من الـ Inspector

ثانياً استخراج النصوص بالطريقة غير المباشرة

فى بعض الاحيان يكون العنصر ليس له ID وفى هذه الحالة نقوم بالدوران على جميع العناصر الموجودة ضمن الـ TagName الذى يقع فيه هذا العنصر

كالتالى

كود Visual Basic
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("Tegname")
            If HT.GetAttribute("AttributeName") = "AttributeValue" Then
                Dim WantedText As String = HT.InnerText
            End If
        Next
    End Sub


قمنا بعمل حلقة دوران على جميع العناصر التى تقع فى TagName معين ومن خلال جملة شرطية استخرجنا النص الذى نريده من العنصر الذى يحمل النص كالتالى

كود:
[COLOR=Purple][SIZE=3][FONT=Arial]For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("Tegname")[/FONT][/SIZE][/COLOR]


حلقة دوران باستخدام For Each للدوران على جميع العناصر الموجود داخل TagName قم بتغيرها باسم الـ TagName الذى استخرجته من الـ Inspector

كود:
[COLOR=Purple][SIZE=3][FONT=Arial]If HT.GetAttribute("AttributeName") = "AttributeValue" Then[/FONT][/SIZE][/COLOR]


نختير كل عنصر من العناصر ونفلتره حسب سماته وخواصه من خلال دالو GetAttribute والتى ندخل اليها اسم الخاصية التى نريدها واذا كانت قيمة الخاصية متوافقة مع الجملة الشرطية اذا هذا هو العنصر الذى نريده

كود:
[COLOR=Purple][SIZE=3][FONT=Arial]Dim WantedText As String = HT.InnerText[/FONT][/SIZE][/COLOR]


نقوم باستخراج النص من العنصر

توضيح

اسم الـ TagName يكون موجود فى الـ Inspector كالتالى



كما محدد فى الصورة هذا هو اسم الـ TagName

اما الـ Attribute فتكون كالتالى



فى الصورة مثلا اسم السمة AttributeName هو herf وقيمتها AttributeValue هى ما بين القوسين ""

ملاحظات اختر Attribute مميزة للعنصر ولا تكون مشترك بها اكثر من عنصر



فى بعض الاحيان الاخرى ايضا قد لاتجد ID للعنصر ولا حتى Attribute مميزة له

فى هذا الحالة نقوم بتحميل الصفحة كـ String كالتالى


كود Visual Basic
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim PageString As String
        Using Client As New System.Net.WebClient
            PageString = Client.DownloadString("Link")
        End Using
    End Sub


وبعد ذلك استخرج النص باستخدام الـ Regex افضل او ان كنت تجيد دوال التعامل مع النصوص مثل InStr و InStrev و Mid و SubString و Replace فيمكن بصعوبة الى حد ما استخراج النص

ايضا فى بعض الاحيان الاخرى ولم ارها الا مرة واحدة فى هذا الموضوع

http://www.dev-point.com/vb/t574639.html

وهو موقع لرفع الملفات وفى هذه الحالة انا اردت ان استخرج الرابط المباشر للملف بعدما تم رفعه
فلم يكن للعنصر Id او Attribute ولا حتى نفع معه تحميل الصفحة كنص String وذلك لان مثل هذه الصفحات تكون صفحة مؤقتة اى انك لو عملت اعادة تنشيط للصفحة فلن تجدها وسيخرج لك خطأ لان والله اعلم تكون صلاحية الـ Token او الكوكيز تنتهى

فى مثل هذه الحالة قمت بفحص العنصر فكان الرابط موجود فى الـ Inspector اذن الرابط موجود فى الـ OuterHtml كما قلت فى البداية لان ما يظهر فى الـ Inspector هو نفسه الـ OuterHtml

لذلك قمت بعمل حلقة دوران على جميع العناصر واستخراج الـ OuterHtml لهما وكتابتها فى List(Of Strin) وبعد ذلك باستخدام دوال النصوص قمت باستخراج الرابط
والكود كما يلى


كود Visual Basic
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim DataList As New List(Of String)
        For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("TagName")
            DataList.Add(HT.OuterHtml & vbNewLine)
        Next
        'كود استخراج النص من الـ 
        ' List 
    End Sub


الببساطة فى مثل هذه المواقع قم اذا رائيت الرابط فى الـ Inspector قم بهذه الطريقة واذا لم تنفع جرب ايضا نفس الكود مع تغير الـ OuterHtml الى InnerHtml او OuterText او InnerText وبالتاكيد ستنفع واحدة منهم



انتهى نلتقى فى الرد القادم مع ارسال النصوص
 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

ارســــــــــال الــــــنـــــصــــــوص



اهلا بكم من جديد اعزائى اولا اعتذر عن الاخطاء الاملائية فى الرد السابق كنت متعب جداً ولم الاحظها وارجوا من المشرفين تعديلها ان امكن

نبدأ معاً فى كيفية ارسال النصوص

عملية ارسال النصوص بسيطة جداً ومن هنا وكل ما هو قادم سهل ان شاء الله فقط كان الجزء السابق هو اصعب شىء ولكن يمكن تسهيله جداً باستخدام الـ Regex المهم

ارسال النصوص مباشرة

اى اذا كان الحقل الـ HtmlElement يملك Id فيكون الكود كالتالى
لنفرض ان لديك نص معين فى TextBox1 فى برنامج وتريد عند اكتمال تحميل الصفحة يتم ادخال هذا النص الى حقل اسم المستخدم User Name فكل ما عليك فحص هذا الحقل ( العنصر HtmlElement ) بالمتصفح واستخراج الـ Id للعنصر على افتراض ان العنصر يملك ID و وضع هذا الكود فى حدث WebBrowser1_DocumentCompleted وهو الحدث الرئيسى لاداة الـ WebBrowser

كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("ElementID").InnerText = TextBox1.Text
    End Sub


فى هذه الحالة الكود يتم تشغيله عندما ينتهى المتصفح WebBrowser من تحميل الـ Document كاملة وهو يقوم بالبحث عن العنصر وايجادة من خلال الـ ID وعندما يجده يضع الـ InnerText الخاص به يساوى الـ TextBox1

يمكن كتابه الكود بطريقة اخرى قد تنفع فى بعض الحالات وهى كالتالى

كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As  System.Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("ElementID").SetAttribute("InnerText", TextBox1.Text)
    End Sub


هنا استخدمنا الدالة SetAttribute وتستخدم لتغير قيمة خاصية ( سمة ) معينة للعنصر وهى تاخذ وسيطين الاول اسم الخاصية التى تريد تغيرها والثانى القيمة التى تريد تغيره اليها
غير InnerText باى خاصية اخرى تريدها

ملاحظة يمكن استخدام نفس هذه الفكرة فى جلب النصوص باستخدام دالة GetAttribute لجلب نص من عنصر معين اذا كان الـ InnerText يعود بقيمة فارغة وهى تاخد وسيط واحد وهو اسم الخاصية والكود التالى

[/]
كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As  System.Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        TextBox1.Text = (WebBrowser1.Document.GetElementById("ElementID").InnerText)
    End Sub


هو نفسه هذا الكود ولكن بطريقة مختلفة فى حال لم ينفع الاول
كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As  System.Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        TextBox1.Text = (WebBrowser1.Document.GetElementById("ElementID").GetAttribute("Value"))

        'او 

        TextBox1.Text = (WebBrowser1.Document.GetElementById("ElementID").GetAttribute("InnerText"))

    End Sub



ارسال النصوص بطريقة غير مباشرة

اذا لم يكن للعنصر ID فنقوم ايضا مثلما فعلنا فى استخراج النصوص بعمل حلقة دوران على جميع العناصر فى الـTagName الذى يقم العنصر الذى نريده فيه كما يلى

كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("Name Fo The TagName")
            If HT.GetAttribute("AttributeName") = "AttributeVlaue" Then
                HT.InnerText = TextBox1.Text 'او  HT.SetAttribute("Value Or InnerText", TextBox1.Text)
            End If
        Next
    End Sub


قمنا بعمل حلقة تكرارية على جميع الـعناصر HtmlElements الموجودة ضمن نظام الـTagName وقمنا بفلترتها عن طريق خواصها باستخدام الجميل الشرطية واذا كانت الخاصية مطابقة لعنصر معين يتم ارسال النص له

يمكن كتابة الحلقة التكرارية السابقة بالـ LINQ بهذه الطريقة
كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim HTS = From HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("NameOfTagName") Where HT.GetAttribute("AttributeName") = "AttributeValue" Select HT
        Array.ForEach(HTS.ToArray, Sub(WHT As HtmlElement) WHT.InnerText = TextBox1.Text)
    End Sub

وبالمثل مع جميع ما سبق


طبعا يمكنك استخدام اى Attribute لفلترة العناصر بواسطتها ولكن بالطبع كما نوهت اختيار خاصية ممزية للعنصر

للاسف عملية ارسال النصوص ليست مرنة مثل استخراجها او على الاقل هذه هى الطرق التى اعرفها :24:

ولكن لا تقلق فتقريا كل المواقع التى ستتعامل معها ستكون اما الحقول لها ID او بكل تاكيد خاصية مميزة لها

انتهى هذا الجزء بحمد لله نلتقى فى الرد القادم مع الضغط على الازرار و اشرب شاى :39by: :24:

يُـــــــــتـــــــــــبع فى الـــــــــــرد الـــــــقــــادم

 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

الــــضـــــغــــط عـــلـــى الازرار



نكمل معاً اخوتى

الضغط على الازار

لا اريد تسميتها بهذا الاسم ولكن ليكن فلا مشكلة فى الاسم لانه لا يمكننا ان نقصر استخدام دالة InvokeMember على الضغط على الازرار فقط فكما اوضحت فى بداية الشرح فانها

تعنى استدعاء او طلب و Member تعنى حرفيا عضو ولكنها هنا تعنى Method والتى تعنى حدث ( حرفياً تعنى طريقة ) ليس هذا مهم المهم انها
تستخدم هذه الطريقة لاستدعاء حدث معين لاى عنصر


ليس لى خبرة فى الـ Html ولكن غالبا فان معظم العناصر يكون اكثر احداثها اهمية هو حدث الضغط فماذا ستحتاج انت من اى عنصر فى الموقع سوى الضغط عليه

دالة InvokeMember تاخذ وسيطين Tow Parameters الاول من نوع Stringهو اسم الحدث Method التى تريد استدعاها ( تنفيذها ) والثانى لا يهمنا فى شىء وهو من نوع Array وهو عبارة عن ليست وسيطتات يتم ادخالها الى هذا العنصر عند استدعاء الحدث اذا كان هذا العنصر HtmlElement يحتاج الى اى وسيط لتنفيذ الحدث

كما قلت InvokeMember تاخذ اسم اى حدث تريد تنفيذه وليس شرط click فقط اقول ذلك واكرر لكى نزيل طريقة الحفظ ولكى نفهم اكثر

المهم انا هنا سوف اشرح clicking فقط اى الضغط

الضغط على العناصر بطريقة مباشرة

كما فى ارسال واستخراج النصوص نقوم بالضغط على اى زر بطريقة مباشرة فى حالة كان للزر ( العنصر ) ID

ويكون الكود كالتالى


كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("initialUploadSection").InvokeMember("click")
    End Sub


بعض الازرار قد لا تنفع معها هذا الكود فقط غير الوسيط Parameter الذى يحمل اسم الحدث من click الى submit او onclick او onclicking

كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("initialUploadSection").InvokeMember("submit")
    End Sub


كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        WebBrowser1.Document.GetElementById("initialUploadSection").InvokeMember("onclick")
    End Sub


الضغط على العناصر بطريقة مباشرة

كما فى استخراج وارسال النصوص ايضاً فى حال لم يكن للعنصر ID فنقوم بعمل حلقة تكرارية على جميع العناصر فى الـ TagName واختبار خصائصها وسماتها Attributes ومن ثم عندما يتطابق مع اى عنصر فيهم يتم الضغط عليه


كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("Name Of TagName")
            If HT.GetAttribute("Attribute Name") = "Attribute Value" Then
                HT.InvokeMember("click or submit or onclick >>>")
            End If
        Next
    End Sub


نفس الفكرة كما عملنا سابقا نقوم بالدوران على جميع العناصر HtmlElement من خلال For Each فى الـ TagName وفلترتها من خلال جلب خاصية معينة مميزة للعنصر واذا تطابقت النتائج يتم الضغط على العنصر.

يمكن الاستغناء عن الحلقات التكرارية وجملة If باستخدام الـ LINQ اسرع وافضل ومختصر اكثر

كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        Dim HTS = From HT As  HtmlElement In  WebBrowser1.Document.GetElementsByTagName("NameOfTagName") Where  HT.GetAttribute("AttributeName") = "AttributeValue" Select HT
        Array.ForEach(HTS.ToArray, Sub(WHT As HtmlElement) WHT.InvokeMember("click or ......"))
    End Sub


تقنية رائعة وانصح الجميع بتعلمها

انتهى الشرح هنا واكرر دالة InvokeMember تقبل اى حدث تريد تشغيله فى العنصر وليس فقط click ولكن غاليا هى التى ستقابلك فى تعاملك مع معظم المواقع

قد يرى يكون البعض لم يفهم الشرح حتى الان لانه شرح نظرى نظرى جامد ولكن فى اخر الموضع ان شاء الله يكون لنا شرح عملى كمثال على موقع معين



يُــــــــتـــــبـــــع فـــــى الــــــــرد الــــقـــادم مــــع شــــرح اســــتـــخـــراج الـصــور

 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

اســـــتـــــخـــراج الـــصـــــور



استخراج الصور مهم جداً فى التعامل مع صفحات الويب فيستخدم لاستخراج صور الكابتشا :24:
وايضا احيانا قد تكون تعمل على برنامج معين وتريد استخراج صورة منه

المهم هناك ثلاث طرق لاستخراج الصور

سوف اعتير انك الان قد فهمت ما معنى ان نقوم بالتعامل مع العنصر مباشرة من خلال الـ ID و او غير مباشر بحلقات الدوران ولست فى حاجة لكى اعيد الكلام مرة اخرى ولكى اختصر الشرح ولا يصبح طويل سوف اشرح طريقة حلقات الدوران ( الطريقة الغير مباشرة ) فقط



اولا فحص الصورة وهى تعتبر HtmlElement عادى نفحصها ب Inspector المتصفح عادى جدا ولكن كودها ( OuterHtml ) مميز قليلاً

هذه مثلا صورة عندما فحصت صورتى الشخصية فى الديف بوينت التى تظهر فى الهيدر العلوى



الذى يهمنا هنا هو الـ Attribute التى تحمل الرابط المباشر للصورة src مهمة جدا فى تعاملنا مع استخراج الصور والرابط بعدها الذى يقع بين القوسين "" هو الرابط الذى نريده

الطريقة الاولى

تعتمد هذه الطريقة على استخراج الرابط المباشر للصورة من الموقع ومن ثم تحميلها الى الهارد ديسك ومن ثم عرضها فى PictureBox


كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        Dim PicLink As String = WebBrowser1.Document.GetElementById("PicID").GetAttribute("src").ToString
        Using Client As New System.Net.WebClient
            Client.DownloadFile(PicLink, "C:\Pic.jpg")
            PictureBox1.Image = Image.FromFile("C:\Pic.jpg")
        End Using
    End Sub


هذا الكود بالظريقة المباشرة اذا كانت الصورة لها ID استبدله فى الكود ب PicID

كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As  Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        Dim PicLink As String
        For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("Name Of TagName")
            If HT.GetAttribute("Attribute Name") = "Attribute Vlaue" Then
                PicLink = HT.GetAttribute("src")
                Using Client As New System.Net.WebClient
                    Client.DownloadFile(PicLink, "C:\Pic.jpg")
                    PictureBox1.Image = Image.FromFile("C:\Pic.jpg")
                End Using
            End If
        Next
    End Sub


هنا اذا كانت الصورة ليس لها ID لا تحدث كثيراً ولكن للاحتياط المهم مثل كل مرة نقوم بالدوران على جميع العناصر فى الـ TagName باستخدام For Each ومن خلال خاصية مميزة للصورة عن باقى العناصر نقوم بفلترتها باستخدام IF وعند تطابق الخاصية نقوم بجلب الرابط المباشر من الصورة من خلال جلب قيمة الخاصية src ووضعه فى المتغير PicLink
بعد ذلك استخدمنا WebClient لتحميل الصورة الى المسار C:\Pic.jpg ومن ثم وضعنا الصورة فى الـ PictureBox يمكن حذف الصورة من مسارها بعد ذلك

الطريقة الثانية

لا تحتاج الى حفظ الصورة الى الهارد ديسك فقد نقوم بحفظ الصورة فى بيتات Bytes فى Stream فى الذاكرة وبعد ذلك تكوين صورة Bitmap من هذه البياتات ووضعها فى الـ PictureBox

كود Visual Basic
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As  Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        Dim PicLink As String
        For Each HT As HtmlElement In WebBrowser1.Document.GetElementsByTagName("Name Of TagName")
            If HT.GetAttribute("Attribute Name") = "Attribute Vlaue" Then
                PicLink = HT.GetAttribute("src")
                Dim Client As New System.Net.WebClient
                Dim BytesOfImage() As Byte = Client.DownloadData(PicLink)
                Dim ImageStream As New IO.MemoryStream(BytesOfImage)
                PictureBox1.Image = New System.Drawing.Bitmap(ImageStream)
            End If
        Next
    End Sub


شبيها بالطريقة الاولى ولكنها افضل الى حد ما
الاعلان عن متغير من نوع نصى لحفظ رابط الصورة المباشر
الدوران على جميع العناصر لاستخراج الرابط الصورة المباشر ووضعه فى المتغير
الاعلان عن Webclient جديد لتحميل الصورة
تحميل الصورة والحصول على البيتات الخاصة بها
حفظ هذه البيتات فى MemoryStream جديد فى الذاكرة
تحويل هذه البيتات المحفوظة فى الـ MemoryStream الى صورة من خلال System.Drawing ووضع الصورة فى الـ PictureBox


الطريقة الثالثة

هى الافضل وانصح باستخدامها دئما تنفع فى جميع الحالات وسوف اوضح لماذا

فى بعض الاحيان هناك مواقع تكون الكابتشا بها معقدة بمعنى رابط الصورة المباشر للكابتشا ثابت دائما ولكن فى كل مرة تفتحه يظهر لك صورة مختلفة فلو جربت الطريقة الاولى او الثانية سترى ان عند تحميل الصورة تكون الصورة مختلفة عن الصورة فى الموقع او حتى لو حفظتها فى الذاكرة ايضاً بل واكثر جرب حتى تفتح الرابط فى متصفحك فاير فوكس سترى الصورة موجودة وفى كل مرة تعمل فيها ريفرش للمتصفح تتغير الصورة على الرغم من ثبوت الرابط

الطريقة الثالثة تعتمد على اننا نقوم بتحديد الصورة ونرسل امر ضغط كليك يمين بالفارة على الصورة وعمل Copy لها وهنا تم حفظ الصورة فى الـ Clipboard وبعد ذلك نضع الصورة فى الـ PictureBox


كود Visual Basic
    Private Sub  WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As  System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles  WebBrowser1.DocumentCompleted
        Dim elem As HtmlElement = WebBrowser1.Document.GetElementById("PicID")
        Dim cap As Object = WebBrowser1.Document.DomDocument.bOdy.createControlRange()
        cap.Add(elem.DomElement)
        cap.execCommand("Copy")
        PictureBox1.Image = My.Computer.Clipboard.GetImage
    End Sub


اعلنا عن متغير من HtmlElemnt اى عنصر وهو يحمل قيمة العنصر الذى يحمل الصورة وذلك من خلال جلبه من الـ ID وهذا عيبها الوحيد :smile:
اعلنا عن متغير اخر وهو عبارة عن صفحة ويب Document فارغة
قم باضافة الـ elem وهو المتغير الذى يحمل الصورة الى الصفحة الفارغة وايضا استخدام DomElemnt وهو امر يستخدم لتحديد عنصر معين والوقوف عليه بمؤشر الفارة
ارسال امر نسخ للصورة كانك ضغت كليك يمين على الصورة بالفارة و عملت Copy لها وحفظها فى الـ Clipboard
ارجاع الصورة المحفوظة الى الـ PictureBox


انتهى الشرح بعون الله


 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

الـــــــخــــــاتــــمــــة



الشرح اخذ منى وقت كبير وانا اجهز له من فترة كبيرة وبسبب الامتحانات لم استطع انهائه بسرعة :39by:

حبيت اوضح كل الامور حتى يفهم الجميع استخدمت اكواد بسيطة لتكون مفهومة للكل

شرحت هذا الموضوع نظراً لكثرة الاسئلة التى تدور حول هذا الموضوع فى قسم الاستفسارات

ان اصبت فى شىء فهو من الله عز وجل وان اخطات فهو منى ومن الشيطان

لانه افضل ان يفهموا الشرح ويطبقوا بانفسهم من ان نكتب لهم الكود وينسخونه بدون فهم

الشرح لوجه الله تعالى وغرضى منه الفائدة وتعبى سوف انساه دئما اذا استفاد ولو واحد من الشرح

اى استفسار تفضل بطرحه هنا وسوف احاول الاجابة ان استطعت وان لم اكن اعرف الاجابة فان شاء الله يفيدك الاخوة اساتذتى

اعلم ان الـ WebBrowser ليس افضل طريقة للتعامل مع صفحات الويب ولكنه جيد جداً وسهل وبسيط ولكن بالطبع يوجد طرق افضل وهى الـ WebRequist والـ WebRespons



الـ Regex مهمة جداً فى هذا الموضوع ( التعامل مع صفحات الويب ) ومعظم الاكواد هنا يمكن اختصارها بشكل كبير بالـ Regex ولكن هى ليست موضوع شرحى ولكن انصح الجميع بتعلمها



لا تقرا وترحل افتح الفيجوال استدويو وطبق هذا الشرح على اى موقع حتى تفهم



الاهـــــــداء



الى اخى الغالى اسلام بمناسبة رجوعه للقسم CorrM :157:
الى اخى وصديقى محمود الذى كان يشجعنى دائما اثناء الشرح
»UNDeTECTeD« :157:
الى اخى المبدع محمد
mohamed4ch :157:
الى ابن بلدى الاخ يوسف Youssef13 :157:
والى المبدع واستاذى محمد فرح
Qassam Sniper :157:

الشرح موجه بشكل خاص للاخ Mohamed49 :dv (2):




 
إنضم
30 يونيو 2014
المشاركات
2,329
الإعجابات
5,293
النقاط
113
الإقامة
فلسطين العزة
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

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

بارك الله فيك أخي الكريم Dark~Black :42: .. صراحة شرح مذهل جداً ومفصل لأبعد مدى .. الكثير من الأعضاء طلبوا مثل هذه الدروس .. وهذا الموضوع هو مرجع ممتاز لأداة WebBrowser .. الله يعطيك الف عافية على مجهودك الكبير :42:

يثبت لمدة 72 ساعة :42:

وفقك الله
 
إنضم
23 مارس 2013
المشاركات
1,950
الإعجابات
2,887
النقاط
203
العمر
21
الإقامة
المملكة المغربية
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

بارك الله فيك موضوع قيم بعرق الجبين :130::32:
واصل يا أخي :637481:
 
إنضم
30 يناير 2012
المشاركات
2,544
الإعجابات
3,032
النقاط
113
الإقامة
Egypt
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

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

آبداااع يا صديقي بمعنى الكلمة والله تستاهل آحلى لايك واحلى تقيم
فعلا شرح متعوب عليه وكبير وضخم وآستفدت منه بصراحة خصوصا جلب الصورة بالطريقة الثالثة
وهي كآنك نسختها فعلا شرح وافي وشامل عن الويب براوز ومفهوم جدآ ,, المفروض نمنع الاستفسارات
حول الويب براوز بعد هذا الشرح

اشكرك يا غالي من كل قلبي

موفق
 

CorrM

Just a Programmer
rankrankrankrankrankrank
إنضم
27 ديسمبر 2013
المشاركات
3,496
الإعجابات
6,731
النقاط
113
الإقامة
Egypt
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

الموضوع راائع فعلا و اعجبنى طريقه سردك للموضوع

تستاهل كل خير يا غالى

:13:
 

Oualid

Active DeveloPer
rankrankrank
إنضم
4 أكتوبر 2014
المشاركات
538
الإعجابات
517
النقاط
93
الإقامة
Morocco
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

السلام عليكم ورحمة الله تعالى وبركاتة :32::32:

بارك الله فيك أخي على الشرح الممتاز و الوافي ما قصرت , لقد استفدت كثيرا :32::32:

جعلها الله في ميزان حسناتك :32::32:

:dv (6)::dv (6)::dv (6)::dv (6)::dv (6)::dv (6)::dv (6):
 

IRadical

ExpErt DeveloPer
rankrankrankrank
إنضم
31 يناير 2015
المشاركات
1,807
الإعجابات
2,830
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

وعليكم السلام و رحمة الله أخي منسى،
ماذا يمكن أن أقول أمام هذا الموضوع، لم أجد الكلمات المناسبة
هذه الكلمات لن تعطيك حقك أبدا ولكنها أفضل ما يسعني أن أقول،
جهد جبار ومميز وشرح رائع و مفصل
و كل هذا ليس بغريب من شخص مثلك

:32::32:
 
إنضم
14 مارس 2013
المشاركات
8,601
الإعجابات
6,235
النقاط
133
الإقامة
~ أƒأ‘أ– أ‚أ،أ،أ¥ ~
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

بارك الله فيك اخي الغالي

الله يعطيك الف عافية

شرح فوق الخيال : : من ناحية المحتوى والترتيب

بارك الله فيك والاخ محمد ماقصرر :32::32::32:
 
إنضم
2 أغسطس 2014
المشاركات
1,081
الإعجابات
1,681
النقاط
113
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

مشكورين اخوانى جميعاً على مروركم الكريم

وردودكم المشجعة

بارك الله فيكم وهذا الشرح لا شىء مقارنة بما تعلمته منكم

:dv (6)::32:
 
إنضم
26 سبتمبر 2014
المشاركات
3,355
الإعجابات
4,472
النقاط
113
الإقامة
Egypt
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

ما هذا الابداع يا غالى
تنظيم رائع وشرح رائع ...
 
إنضم
11 يناير 2012
المشاركات
7,483
الإعجابات
8,340
النقاط
113
الإقامة
04
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

موضوع مفيد ماشاء الله عليك خويا شكرا لك
:32:
 

security basra

Beginner Developer
rank
إنضم
8 يناير 2015
المشاركات
132
الإعجابات
98
النقاط
0
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

بارك اللة بك اخوي شرح جميل ورائع ومفصل
 

Ihabou

DeveloPer Plus
rankrankrankrankrank
إنضم
18 نوفمبر 2014
المشاركات
2,192
الإعجابات
2,184
النقاط
113
العمر
24
الإقامة
Biskra_Dz
رد: الـتـعـامـل مـع الـ WebBrowser و دواله - والـتـعـامـل مــع صـفـحـات الـويـب

جاري متباعة الشرح # :dv (6):
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل