28-12-19, 04:55 PM
السلام عليكم ورحمة الله وبركاته.
هل هناك شرح لاظهار جزء محدد فقط من أى موقع داخل اداة الويب براوزر هكذا مثلا أريد اظهار
الجزء المحدد بالأصفر..وأتمنى يكون شرح ليس حلاً على السريع.
Dim Content As String = Driver.FindElement(By.XPath("/html/body/div[2]/center/table/tbody/tr/td[3]/center/table[2]/tbody/tr[1]/td/center/table/tbody/tr[5]/td/p[2]")).Text
(28-12-19, 09:12 PM)ابو ليلى كتب : [ -> ]السلام عليكم و رحمة الله و بركاته
الاخ ابو روضة,
بعد الاطلاع على الصفحة ,
الصفحة تحتوي على عدة جداول داخلها,و الجزء المظلل بالاصفر لديك يمثل جدول من 5 صفوف و عمود واحد.
الصف الاول يحتوي فاصل
الصف الثاني يحتوي العنوان
الصف الثالث يحتوي فاصل
الصف الرابع يحتوي الكاتب
الصف الخامس يحتوي محتوى المقالة
يمكنك جلب معلومات كل صف لديك كما تريد بواسطة Selenium .
المعلومات يمكن الوصول اليها عبر رقم الصف و رقم الخلية (المعلومات نصية).
بعدها يمكنك تخزينها باي حاوية نصية كما تريد.
اتوقع انك تعرف العمل مع Selenium بشكل جيد استخدم الدالة " FindElement(By.XPath"
يمكنك الحصول على المسار عبر الصورة التالية
![]()
ضع النص الذي تحصل عليه في وسيطة الدالة.
مثال المسار الخاص بمحتوى المقالة يمكن استقباله كنص كما يلي:
PHP كود :
Dim Content As String = Driver.FindElement(By.XPath("/html/body/div[2]/center/table/tbody/tr/td[3]/center/table[2]/tbody/tr[1]/td/center/table/tbody/tr[5]/td/p[2]")).Text
(29-12-19, 07:17 PM)ابو ليلى كتب : [ -> ]السلام عليكم و رحمة الله و بركاته
الاخ ابو روضة,
عبر استخدام HtmlAgilityPack نجلب محتوى العقدة المحددة عبر تمرير Xpath كما سبق.
حيث ان Selenium ستقوم بفتح نافذة في المتصفح و نحن لا نريد ذلك.
اسوء ما في الامر هو هذه الاداة العجوز Web Browser الخاصة باللغة لا تمكنك من الوصول الى غايات كثيرة.
على اي حال تم تنفيذ المطلوب مع المحافظة قدر الامكان على الكود الموجود.
الطرقة تتبع منهج Async Await لمحاولة تلافي مشكلة تحميل الصفحات قدر الامكان.
اذا رايت ان هناك شرحاً مطلوب فقط اخبرنا, لان الكود بسيط و المكتبة معروفة و مشهورة.
بالتوفيق.
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
On Error Resume Next
For Each input As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td")
If input.GetAttribute("width") = ("130") Then
input.Style = "visibility:hidden;"
End If
Next
For Each input As HtmlElement In WebBrowser1.Document.GetElementsByTagName("td")
If input.GetAttribute("width") = ("149") Then
input.Style = "visibility:hidden;"
End If
Next
For Each input As HtmlElement In WebBrowser1.Document.GetElementsByTagName("tbody")
If input.GetAttribute("className") = ("style7") Then
input.Style = "visibility:hidden;"
End If
Next
For Each input As HtmlElement In WebBrowser1.Document.GetElementsByTagName("img")
If input.GetAttribute("src").Contains("twitter.jpg") Then
input.Style = "visibility:hidden;"
End If
Next
Timer1.Stop()
WebBrowser1.Visible = True
End Sub(29-12-19, 09:45 PM)ابو ليلى كتب : [ -> ]السلام عليكم و رحمة الله و بركاته
شكراً لك على كلماتك اخي ابو روضة.
صراحة القيام بشرح للعملية يحتاج الى تسجيل فيديو و رفعه لكن النت لدي ضعيف و لا يحتمل.
العملية بسيطة جداً , فقط اضع لك هذا الفيدو البسيط و يوجد فيدوهات كثيرة يمكنك مراجعتها حتى تتقن العملية.
https://www.youtube.com/watch?v=jSiYpmvA50A
بالنسبة للمسار الذي وضعته في برنامجك تم ازالة كل شيئ قبل كلمة table و الابقاء على باقي المسار , حيث المكتبة HtmlAgilityPack لها طريقة خاصة بالتعامل , بينما نفس المسار كامل يعمل مع Selenium و هو المسار المذكور في الرد الاول.
(29-12-19, 10:05 PM)ابو ليلى كتب : [ -> ]الاخ ابو روضة,
المسار تم اخذه من صفحة (صفحة مقال) و تحديداً من الصفحة اللي انت واضع رابطها في بداية السؤال
http://www.saaid.net/twitter/216.htm
و نظراً لان القالب موحد في جميع الصفحات فالمسار ينطبق على كل الدروس فقط ما يختلف هو رابط الصفحة.