انتقل إلى المحتوى

كيف تنتظر تحميل الصفحة في Playwright؟

عند استخراج صفحات الويب الديناميكية باستخدام Playwright وPython، من المهم الانتظار حتى يتم تحميل الصفحة بالكامل قبل محاولة استخراج البيانات. فيما يلي بعض الأساليب الفعالة لانتظار تحميل الصفحة بالكامل في Playwright:

استخدم page.wait_for_load_state()

إن أبسط طريقة هي استخدام page.wait_for_load_state() واجهة برمجة التطبيقات. وينتظر هذا حتى تصل الصفحة إلى حالة "التحميل"، مما يعني أن الصفحة قد قامت بتشغيلها load حدث:

await page.goto("https://example.com")
await page.wait_for_load_state() 

يمكنك أيضًا انتظار حالة "networkidle"، والتي تنتظر حتى لا تكون هناك اتصالات بالشبكة لمدة 500 مللي ثانية على الأقل:

await page.goto("https://example.com")
await page.wait_for_load_state("networkidle")

انتظر محددًا محددًا

هناك أسلوب شائع آخر وهو انتظار ظهور محدد محدد على الصفحة. يشير هذا إلى أنه تم تحميل جزء معين من الصفحة:

await page.goto("https://example.com")
await page.wait_for_selector("div.loaded")

قد تحتاج إلى فحص الصفحة والعثور على محدد لا يظهر إلا عند تحميل الصفحة بالكامل.

انتظر حتى ينتهي التنقل

يمكنك أيضًا الانتظار حتى ينتهي التنقل نفسه من التحميل wait_for_navigation:

await page.click("a.dynamic-page") 
await page.wait_for_navigation()

سيؤدي هذا إلى إيقاف التنفيذ مؤقتًا حتى يكتمل حدث التنقل بعد النقر فوق الارتباط.

تعيين مهلة

إنها فكرة جيدة أن تحدد مهلة عند الانتظار، حتى لا يتعطل البرنامج النصي إذا لم يتم استيفاء الشرط مطلقًا:

await page.wait_for_selector("div.loaded", timeout=10000)

سينتظر هذا ما يصل إلى 10 ثوانٍ قبل ظهور خطأ إذا لم يظهر المحدد.

انتظر بين التفاعلات

لتجنب أخطاء تحديد المعدل، استخدم sleep() لإضافة تأخير بين التفاعلات:

await page.click("#submit")
await page.wait_for_navigation()
sleep(5) # wait 5 seconds

وهذا يتيح وقتًا لانتهاء الإجراء السابق قبل اتخاذ الإجراء التالي.

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

الوسوم (تاج):

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *