كيفية اكتشاف ما إذا كنت لا تستطيع التمرير لأسفل بعد الآن في بيثون

نشرت: 2025-03-20

عند العمل مع Python لأتمتة الويب أو تجريف الويب ، فإن اكتشاف ما إذا كنت قد وصلت إلى نهاية صفحة الويب أمر بالغ الأهمية. يعد هذا مفيدًا بشكل خاص للتعامل مع صفحات التمرير اللانهائية ، أو تجريد المحتوى المحمّل ديناميكيًا ، أو إيقاف التمرير غير الضروري في برامج النصوص الأتمتة. يشرح هذا الدليل كيفية التحقق مما إذا كان لا يمكنك التمرير لأسفل باستخدام Python و Selenium.

لماذا اكتشاف نهاية التمرير أمر مهم

تستخدم العديد من مواقع الويب الحديثة تمريرات Infinite ، حيث يتم تحميل المحتوى ديناميكيًا أثناء تمرير المستخدم. يعد اكتشاف عندما تصل إلى أسفل الصفحة أمرًا ضروريًا لأسباب مختلفة.

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

علاوة على ذلك ، يعد تحسين الأداء أمرًا بالغ الأهمية لأنه يسمح بالتمرير بالتوقف في الوقت المناسب ، مما يقلل من تنفيذ JavaScript غير الضروري ، والحفاظ على موارد النظام ، وتحسين كفاءة التشغيل الآلي.

كيفية اكتشاف ما إذا كنت لا تستطيع التمرير لأسفل بعد الآن في بيثون

كيفية اكتشاف ما إذا كنت لا تستطيع التمرير لأسفل بعد الآن في بيثون

هناك طرق متعددة للتحقق مما إذا كانت الصفحة قد وصلت إلى حد التمرير. فيما يلي الطرق الأكثر موثوقية لتنفيذ Selenium Webdriver و JavaScript.

1. استخدام Selenium Webdriver و JavaScript للكشف عن نهاية التمرير

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

خطوات للكشف عن نهاية التمرير باستخدام ارتفاع التمرير:

  1. قم بتحميل صفحة الويب باستخدام Selenium WebDriver.
  2. احصل على موقف التمرير الحالي.
  3. قم بالتمرير لأسفل وانتظر تحميل المحتوى الجديد.
  4. قارن بين مواقف التمرير السابقة والجديدة.
  5. إذا كان كلاهما متماثلاً ، فقد وصلت إلى القاع.

مثال رمز بيثون:

من السيلينيوم استيراد webdriver
وقت الاستيراد

# إعداد WebDriver
driver = webdriver.chrome ()
driver.get ("https://example.com") # استبدل بالموقع الفعلي

def scroll_to_bottom ():
last_height = driver.execute_script ("return document.body.scrollheight")

بينما صحيح:
driver.execute_script ("window.scrollto (0 ، document.body.scrollheight) ؛")
time.sleep (2) # انتظر حتى يتم تحميل المحتوى

new_height = driver.execute_script ("return document.body.scrollheight")
إذا new_height == last_height:
طباعة ("وصلت إلى أسفل الصفحة.")
استراحة
last_height = new_height

scroll_to_bottom ()
driver.quit ()

يتم تمرير هذا البرنامج النصي لأسفل حتى لا يعود ارتفاع الصفحة ، مما يشير إلى عدم توفر المزيد من المحتوى.

2. التحقق قبل وبعد مواقف التمرير

هناك طريقة أخرى للتحقق مما إذا كنت لا تستطيع التمرير لأسفل بعد الآن هي مقارنة موضع التمرير الحالي قبل وبعد التمرير. إذا لم يتغير موضع التمرير ، فقد وصلت إلى القاع.

مثال رمز بيثون:

من السيلينيوم استيراد webdriver
وقت الاستيراد

# إعداد WebDriver
driver = webdriver.chrome ()
driver.get ("https://example.com") # استبدل بالموقع الفعلي

def detect_scroll_end ():
بينما صحيح:
last_position = driver.execute_script ("window.pageyoffset ؛")
driver.execute_script ("window.scrollby (0 ، 500) ؛") # قم بالتمرير لأسفل بمقدار 500 بكسل
time.sleep (2) # اسمح للمحتوى بالتحميل

new_position = driver.execute_script ("window.pageyoffset ؛")
إذا كان last_position == new_position:
طباعة ("لا مزيد من التمرير ممكن.")
استراحة

detect_scroll_end ()
driver.quit ()

هذه الطريقة تتم التمرير لأسفل بزيادات صغيرة ويتحقق مما إذا كان موضع التمرير دون تغيير ، مما يعني أنه لا يمكن تمرير الصفحة بشكل أكبر.

3. التعامل مع مواقع التمرير اللانهائية

قد لا يكون فحص التمرير البسيط كافياً لمواقع الويب التي تقوم بتحميل المزيد من المحتوى ديناميكيًا. تتطلب بعض الصفحات وقت انتظار إضافي لـ JavaScript لتحميل المحتوى. يمكنك تعديل البرنامج النصي للتحقق من وجود عناصر جديدة تظهر بعد كل تمرير.

رمز اكتشاف التمرير المتقدم للتمرير اللانهائي:

من السيلينيوم استيراد webdriver
من selenium.webdriver.common.by استيراد بواسطة
وقت الاستيراد

# إعداد WebDriver
driver = webdriver.chrome ()
driver.get ("https://example.com") # استبدل بعنوان URL الفعلي

def scroll_infinite ():
last_height = driver.execute_script ("return document.body.scrollheight")

بينما صحيح:
driver.execute_script ("window.scrollto (0 ، document.body.scrollheight) ؛")
time.sleep (3) # السماح لمحتوى JavaScript بالتحميل

new_height = driver.execute_script ("return document.body.scrollheight")
إذا new_height == last_height:
طباعة ("نهاية التمرير اللانهائي الذي تم الوصول إليه.")
استراحة
last_height = new_height

scroll_infinite ()
driver.quit ()

هذا يستمر باستمرار لأسفل وينتظر تحميل محتوى جديد. تم تحميل جميع المحتوى المتاح بمجرد أن يظل ارتفاع التمرير كما هو.

المشكلات الشائعة والإصلاحات عند اكتشاف نهاية التمرير

فيما يلي بعض المشكلات الشائعة التي قد تواجهها عند اكتشاف نهاية التمرير وكيفية إصلاحها:

  • تستمر الصفحة في التمرير حتى بعد الوصول إلى القاع. تحتوي بعض مواقع الويب على عناصر تذييل تتوسع عند التمرير إلى العرض ، مما يجعل الأمر يبدو وكأنه محتوى جديد يتم تحميله.
  • يؤدي التحميل الكسول إلى حدوث محتوى مفقود - بعض المواقع تستخدم JavaScript لتحميل المحتوى فقط عند تمرير المستخدم لأسفل ، مما يتطلب وقت انتظار إضافي.
  • التأخير في عرض المحتوى - إضافة تأخير أطول ( time.sleep(3) ) بعد كل تمرير يسمح للمحتوى المحمّل ديناميكيًا قبل استمرار البرنامج النصي بالكامل.
  • التمرير بسرعة كبيرة جدًا - التمرير مسافات أصغر والتحقق مما إذا كان يتم إضافة عناصر جديدة يساعد على منع تجاوز محتوى مهم.
  • أساليب الانتظار غير الفعالة - يؤدي استخدام الانتظار الصريح للسيلينيوم بدلاً من الاعتماد على أوقات النوم الثابتة إلى تحسين الكفاءة من خلال انتظار تحميل العناصر الفعلية بدلاً من التخمين التأخير.

أفضل الممارسات لاكتشاف نهاية التمرير

فيما يلي بعض أفضل الممارسات لضمان اكتشاف التمرير الدقيق والفعال:

  • تحقق من سلوك التمرير أولاً - تحقق دائمًا من كيفية عمل التمرير على موقع الويب المستهدف قبل تنفيذ الأتمتة لتجنب الأخطاء غير الضرورية.
  • استخدم WebDriverWait بدلاً من النوم الثابت () - وهذا يحسن الكفاءة من خلال انتظار العناصر ديناميكيًا بدلاً من الاعتماد على التأخير التعسفي.
  • تجنب التمرير المفرط -يمكن أن يؤدي إرسال الكثير من طلبات التمرير بسرعة إلى اكتشاف مكافحة البوت على بعض مواقع الويب ، مما يؤدي إلى كتل IP أو تحديات Captcha.
  • تحقق من مصادر البيانات البديلة. إذا كان هدفك هو تجريف الويب ، ففكر في استخدام واجهة برمجة تطبيقات موقع الويب لجلب البيانات مباشرة بدلاً من الاعتماد على التمرير.

خاتمة

يعد اكتشاف ما إذا لم يعد بإمكانك التمرير لأسفل في بيثون أمرًا ضروريًا لأتمتة الويب والخروج وتحسين البرامج النصية. باستخدام Selenium Webdriver و JavaScript ، يمكنك التحقق بكفاءة من نهاية التمرير عن طريق مقارنة ارتفاع التمرير ، والموضع ، والمحتوى المحمّل ديناميكيًا. يضمن تنفيذ هذه الأساليب أن يتوقف البرنامج النصي في الوقت المناسب ، ويمنع التمرير غير الضروري ، ويحسن الأداء.

إذا ساعدك هذا الدليل ، شاركه مع الآخرين الذين يعملون على أتمتة الويب والتجشير!