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

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : طريقة عرض هذه المواضيع بهذا الشكل (/showthread.php?tid=25912)

الصفحات: 1 2 3


طريقة عرض هذه المواضيع بهذا الشكل - ابو روضة - 30-07-18

السلام عليكم اخوتى
هناك موقع استشارات واريد جلب المواضيع منه بهذا الشكل بالصور اقصد والرابط ليتم وضعه
داخل المشروع بهذا الشكل ؟... وجزاكم الله كل خير


وهذا هو الموقع

https://www.amrkhaled.net/Category/26/%D8%A7%D8%B3%D8%AA%D8%B4%D8%A7%D8%B1%D8%A7%D8%AA



RE: طريقة عرض هذه المواضيع بهذا الشكل - GameOver - 30-07-18

حرب هذا الكود، الفورم به WebBrowser و Button وبعد التشغيل انتظر حتى اكتمال الصفحة ثم اضغط الButton
كود :
Public Class Form1

   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       WebBrowser1.Navigate("https://www.amrkhaled.net/Category/26/استشارات")

   End Sub

   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

       Dim flow As New FlowLayoutPanel
       flow.Parent = Me
       flow.Dock = DockStyle.Fill
       flow.AutoScroll = True

       For Each element As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
           If element.GetAttribute("className").Contains("tagsNsearch-block lastid FunctionParm") Then

               Dim txt As String = element.InnerText.Trim
               Dim htm As String = element.OuterHtml

               Dim index1 As Integer = htm.IndexOf("<img class=""img-fluid lazy loaded"" src=""")
               Dim img As String = htm.Substring(index1 + 40, htm.IndexOf("""", index1 + 40) - (index1 + 40))

               Dim index2 As Integer = htm.IndexOf("<a class=""headline d-block w-100"" href=""")
               Dim lnk As String = htm.Substring(index2 + 40, htm.IndexOf("""", index2 + 40) - (index2 + 40))

               Dim pnl As New Panel
               pnl.Parent = flow
               pnl.Size = New Size(220, 222)
               pnl.BackColor = Color.White
               pnl.BorderStyle = BorderStyle.FixedSingle
               pnl.RightToLeft = Windows.Forms.RightToLeft.Yes

               Dim pct As New PictureBox
               pct.Parent = pnl
               pct.Size = New Size(220, 147)
               pct.SizeMode = PictureBoxSizeMode.Zoom
               pct.ImageLocation = img

               Dim lbl As New LinkLabel
               lbl.Parent = pnl
               lbl.Size = New Size(220, 75)
               lbl.AutoSize = False
               lbl.TextAlign = ContentAlignment.MiddleLeft
               lbl.LinkBehavior = LinkBehavior.NeverUnderline
               lbl.Top = 148
               lbl.Text = txt
               lbl.Tag = "https://www.amrkhaled.net/" & lnk
               AddHandler lbl.LinkClicked, AddressOf lbl_LinkClicked

           End If
       Next

       flow.BringToFront()

       Me.WindowState = FormWindowState.Maximized

   End Sub

   Private Sub lbl_LinkClicked(sender As System.Object, e As LinkLabelLinkClickedEventArgs)
       Dim link As String = sender.Tag
       MsgBox(link)
       Process.Start(link)
   End Sub

End Class

صراحة هذا الكود ليس لي، ولكن أكيد عدلت عليه بشكل بسيط، لانه نفس الفكرة التي طلبتها


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


RE: طريقة عرض هذه المواضيع بهذا الشكل - ابو روضة - 30-07-18

(30-07-18, 02:55 AM)GameOver كتب : حرب هذا الكود، الفورم به WebBrowser و Button وبعد التشغيل انتظر حتى اكتمال الصفحة ثم اضغط الButton
كود :
Public Class Form1

   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       WebBrowser1.Navigate("https://www.amrkhaled.net/Category/26/استشارات")

   End Sub

   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

       Dim flow As New FlowLayoutPanel
       flow.Parent = Me
       flow.Dock = DockStyle.Fill
       flow.AutoScroll = True

       For Each element As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
           If element.GetAttribute("className").Contains("tagsNsearch-block lastid FunctionParm") Then

               Dim txt As String = element.InnerText.Trim
               Dim htm As String = element.OuterHtml

               Dim index1 As Integer = htm.IndexOf("<img class=""img-fluid lazy loaded"" src=""")
               Dim img As String = htm.Substring(index1 + 40, htm.IndexOf("""", index1 + 40) - (index1 + 40))

               Dim index2 As Integer = htm.IndexOf("<a class=""headline d-block w-100"" href=""")
               Dim lnk As String = htm.Substring(index2 + 40, htm.IndexOf("""", index2 + 40) - (index2 + 40))

               Dim pnl As New Panel
               pnl.Parent = flow
               pnl.Size = New Size(220, 222)
               pnl.BackColor = Color.White
               pnl.BorderStyle = BorderStyle.FixedSingle
               pnl.RightToLeft = Windows.Forms.RightToLeft.Yes

               Dim pct As New PictureBox
               pct.Parent = pnl
               pct.Size = New Size(220, 147)
               pct.SizeMode = PictureBoxSizeMode.Zoom
               pct.ImageLocation = img

               Dim lbl As New LinkLabel
               lbl.Parent = pnl
               lbl.Size = New Size(220, 75)
               lbl.AutoSize = False
               lbl.TextAlign = ContentAlignment.MiddleLeft
               lbl.LinkBehavior = LinkBehavior.NeverUnderline
               lbl.Top = 148
               lbl.Text = txt
               lbl.Tag = "https://www.amrkhaled.net/" & lnk
               AddHandler lbl.LinkClicked, AddressOf lbl_LinkClicked

           End If
       Next

       flow.BringToFront()

       Me.WindowState = FormWindowState.Maximized

   End Sub

   Private Sub lbl_LinkClicked(sender As System.Object, e As LinkLabelLinkClickedEventArgs)
       Dim link As String = sender.Tag
       MsgBox(link)
       Process.Start(link)
   End Sub

End Class

صراحة هذا الكود ليس لي، ولكن أكيد عدلت عليه بشكل بسيط، لانه نفس الفكرة التي طلبتها


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

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



RE: طريقة عرض هذه المواضيع بهذا الشكل - GameOver - 30-07-18

اذا الموقع يستخدم نفس الاسلوب فقط تحتاج تغيير بعض المسميات من رابط واسماء مكونات الصفحة

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


RE: طريقة عرض هذه المواضيع بهذا الشكل - elgokr - 30-07-18

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

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

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

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

بحيث عند الانتهاء ولم يعد يوجد كلمة المزيد
يقوم بتنفيذ كود الاخ GameOver مباشراً

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

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

وحتى ان لا تجعل ما قدمه الاخ GameOver ذهب بدون نفع

تحياتى لك
وتمنياتى لك التوفيق



RE: طريقة عرض هذه المواضيع بهذا الشكل - ابو روضة - 30-07-18

(30-07-18, 06:19 AM)elgokr كتب :
وعليكم السلام ورحمة الله وبركاته

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

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

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

بحيث عند الانتهاء ولم يعد يوجد كلمة المزيد
يقوم بتنفيذ كود الاخ GameOver مباشراً

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

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

وحتى ان لا تجعل ما قدمه الاخ GameOver ذهب بدون نفع

تحياتى لك
وتمنياتى لك التوفيق

وهذا أول ما فكرت به فعلا اخى الجوكر وفضلت اجرب فيه بهذا الكود بعد ان وضعت الكود

الأول اللى فى موضوعى الذى أشرت عليه لكنه لم يفلح لآن هذا الزر لا يوجد به كلمة
لا يوجد مزيد فى النهاية مما جعلنى جعلته فارغ ايضا لم يعمل وكل اللى بيعمله بيفضل يعد
الى مالانهاية.
 
PHP كود :
 Dim input As HtmlElementCollection
        input 
WebBrowser1.Document.GetElementsByTagName("button")
 
       Dim ii As Integer
        For Each item 
As HtmlElement In input
            If item
.InnerText = ("المزيد"Then
                item
.InvokeMember("Click")
 
               Do
                    item
.InvokeMember("Click")
 
                   If item.InnerText = (""Then

                        Exit 
Do
 
                   End If
 
                   On Error Resume Next

                    Dim t 
As New Threading.Thread(AddressOf closeMsgbox)
 
                   t.Start(1'1 = 1 second
                    ii += 1
                    MsgBox("الصفحة رقم " & ii)
                Loop
            End If
        Next item 



RE: طريقة عرض هذه المواضيع بهذا الشكل - elgokr - 30-07-18

كل ما عليك اضافة التحقق التالى
كود :
                   If item.Style = "Display: none" Or item.Style = "display: none;" Then
                       Exit Do
                   End If

بدلاً من التحقق القديم اى اضف هذا التحقق اسفل
كود :
item.InvokeMember("Click")

وبكده سيعمل معك ويتم ايقاف العدد عند انتها واختفاء كلمة المزيد

تحياتى لك
وتمنياتى لك التوفيق



RE: طريقة عرض هذه المواضيع بهذا الشكل - ابو روضة - 30-07-18

(30-07-18, 02:42 PM)elgokr كتب : كل ما عليك اضافة التحقق التالى
كود :
                   If item.Style = "Display: none" Or item.Style = "display: none;" Then
                       Exit Do
                   End If

بدلاً من التحقق القديم اى اضف هذا التحقق اسفل
كود :
item.InvokeMember("Click")

وبكده سيعمل معك ويتم ايقاف العدد عند انتها واختفاء كلمة المزيد

تحياتى لك
وتمنياتى لك التوفيق

هههه والله ما عارف اقولك ايه ولا ايه يا فنان..

والله انت بجد حاجة تشرف وكأن الله وضعك للغلابة اللى مثلى ومثل الكثير..
سؤال اخير لو تكرمت استاذى هو ينفع الغى الرسالة التى تظهر وتقول الصفحة رقم كذا وكذا ؟
لآنها صراحة رخمة شويتين



RE: طريقة عرض هذه المواضيع بهذا الشكل - elgokr - 30-07-18

على ايه بس انا لم افعل شي بل انت ما فعلت كل شي
ويرجع الفضل الى الاخ GameOver
فيما قدمه لك من كود لعرض المجتوى كما فى الموقع

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

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

ويرجع ذلك الى حالة الجهاز

تحياتى لك
وتمنياتى لك التوفيق



RE: طريقة عرض هذه المواضيع بهذا الشكل - ابو روضة - 30-07-18

(30-07-18, 04:57 AM)GameOver كتب : اذا الموقع يستخدم نفس الاسلوب فقط تحتاج تغيير بعض المسميات من رابط واسماء مكونات الصفحة

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

تسلم أخى من كل شر وربنا يجزيك كل الخير يارب

(30-07-18, 03:05 PM)elgokr كتب :
وبخصوص الرسالة بالطبع يمكنك
ولكن قد يسبب التهنيج بالبرنامج
بسبب تنفيذ الاوامر باجمعها فى اقل من ثانية

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