כיצד להמתין לטעינת דף עם סלניום

How Wait Page Load With Selenium



בזמן שאוטומציה באינטרנט או גירוד אתרים עם מנהל התקן Selenium, אתה עלול להיתקל בבעיות כמו שהאלמנט שברצונך לבחור אינו זמין או שהכפתור שברצונך ללחוץ אינו מוכן ללחיצה וכן הלאה.

הסיבה שזה קורה היא שעל מנהל ההתקן של סלניום להוריד את דף האינטרנט ולסיים את עיבוד הדף לפני שתוכל לעשות עליו כלום. בעבר, שרת האינטרנט יצר את התוכן של אתר אינטרנט, והדפדפן פשוט הוריד אותו והציג אותו. בימים אלה יש לנו יישומי אינטרנט רבים בדף יחיד שעובדים קצת אחרת. ביישומי Web Page (SPA), שרת האינטרנט משרת רק את קודי החזית. ברגע שהקוד החזיתי מעובד בדפדפן, קוד החזית משתמש ב- AJAX כדי לבקש נתוני API לשרת האינטרנט. ברגע שהמשמש הקדמי מקבל את נתוני ה- API, הוא מעביר אותם בדפדפן. לכן, למרות שהדפדפן סיים את הורדת ועיבוד דף האינטרנט, דף האינטרנט עדיין אינו מוכן. עליך לחכות עד שיקבל את נתוני ה- API ויעבד אותם גם כן. לכן, הפתרון לבעיה זו הוא לחכות שהנתונים יהיו זמינים לפני שנעשה משהו עם סלניום.







בסלניום ישנם 2 סוגי המתנות:
1) המתנה מרומזת
2) המתנה מפורשת



1) המתנה מרומזת: זה הכי קל ליישום. המתנה מרומזת אומרת לנהג האינטרנט סלניום לחכות מספר שניות עד ש- DOM (מודל אובייקט המסמך) יהיה מוכן (דף האינטרנט יהיה מוכן).



2) המתנה מפורשת: זה קצת מורכב מההמתנה הגלומה. בהמתנה מפורשת אתה אומר לנהג האינטרנט סלניום למה לחכות. סלניום ממתין שהתנאי הספציפי הזה יתקיים. לאחר מילויו, נהג האינטרנט סלניום יהיה מוכן לבצע פקודות אחרות. בדרך כלל, זמן ההמתנה המפורש משתנה. תלוי כמה מהר מתקיימים התנאים. בתרחיש הגרוע ביותר, ההמתנה המפורשת תחכה כל עוד ההמתנה הגלומה.





במאמר זה, אני הולך להראות לך כיצד לחכות (מרומז ומפורש) עד להעמסת דף עם סלניום. אז בואו נתחיל.

דרישות מוקדמות:

כדי לנסות את הפקודות והדוגמאות של מאמר זה, עליך להיות בעל,



1) הפצה לינוקס (רצוי אובונטו) המותקנת במחשב שלך.
2) פייתון 3 מותקן במחשב שלך.
3) PIP 3 מותקן במחשב שלך.
4) פייתון וירטואלי החבילה המותקנת במחשב שלך.
5) דפדפני אינטרנט של Mozilla Firefox או Google Chrome המותקנים במחשב שלך.
6) חייב לדעת כיצד להתקין את מנהל ההתקן Gecko של Firefox או את מנהל ההתקן של Chrome.

לעמידה בדרישות 4, 5 ו -6, קרא את המאמר שלי מבוא לסלניום עם פייתון 3 ב- Linuxhint.com.

אתה יכול למצוא מאמרים רבים בנושאים אחרים בנושא LinuxHint.com . הקפד לבדוק אותם אם אתה זקוק לעזרה כלשהי.

הגדרת מדריך פרויקטים:

כדי לשמור על הכל מאורגן, צור ספריית פרוייקטים חדשה סלניום-חכה/ כדלהלן:

$mkdir -pvסלניום-המתן/נהגים

נווט אל סלניום-חכה/ ספריית הפרויקטים כדלקמן:

$CDסלניום-המתן/

צור סביבה וירטואלית של פייתון בספריית הפרויקטים כדלקמן:

$virtualenv .venv

הפעל את הסביבה הווירטואלית כדלקמן:

$מָקוֹר.venv/אני/לְהַפְעִיל

התקן סלניום באמצעות PIP3 כדלקמן:

$ pip3 להתקין סלניום

הורד והתקן את כל מנהל ההתקן הנדרש ב- נהגים/ מדריך הפרויקט. הסברתי את תהליך ההורדה וההתקנה של מנהלי התקני אינטרנט במאמר שלי מבוא לסלניום עם פייתון 3 . אם אתה צריך עזרה כלשהי, חפש הלאה LinuxHint.com עבור מאמר זה.

אני אשתמש בדפדפן האינטרנט של Google Chrome לצורך ההדגמה במאמר זה. אז, אני אשתמש ב- נהג כרום בינארי מה נהגים/ מַדרִיך.

כדי להתנסות בהמתנה מרומזת, צור סקריפט פייתון חדש ex01.py בספריית הפרויקטים שלך והקלד את שורות הקודים הבאות בקובץ זה.

מסֵלֶנִיוּםיְבוּאמנהל התקן אינטרנט
מסֵלֶנִיוּם.מנהל התקן אינטרנט.מְשׁוּתָף.מפתחות יְבוּאמפתחות
אפשרויות=מנהל התקן אינטרנט.ChromeOptions()
אפשרויות.חֲסַר רֹאשׁ = נָכוֹן
דפדפן=מנהל התקן אינטרנט.כרום(_path הפעלה='./drivers/chromedriver',אפשרויות=אפשרויות)
דפדפן.במשתמע_ממתינים(10)
דפדפן.לקבל('https://www.unixtimestamp.com/')
חותמת זמן=דפדפן.find_element_by_xpath('// h3 [@] [1]')
הדפס('חותמת זמן נוכחית: %s'%(חותמת זמן.טֶקסט.לְפַצֵל('')[0]))
דפדפן.סגור()

לאחר שתסיים, שמור את ex01.py סקריפט פייתון.

שורה 1 ו -2 מייבאת את כל רכיבי הסלניום הנדרשים.

שורה 4 יוצרת אובייקט אפשרויות Chrome.

שורה 5 מאפשרת נהג אינטרנט של Chrome ללא מצב ראש.

שורה 7 יוצרת אובייקט דפדפן Chrome באמצעות נהג כרום בינארי מה נהגים/ מַדרִיך.

קו 8 משמש לאמירת סלניום להמתין במשתמע 10 שניות באמצעות במשתמע_מתין () שיטת דפדפן.

שורה 10 טוענת את www.unixtimestamp.com בדפדפן.

שורה 12 מוצאת את רכיב חותמת הזמן באמצעות בורר XPath // h3 [@class = 'טקסט-סכנה'] [1] ומאחסנת אותו ב חותמת זמן מִשְׁתַנֶה.

קיבלתי את בורר XPath מכלי המפתחים של Chrome. כפי שאתה יכול לראות, חותמת הזמן היא הראשונה h3 אלמנט עם שם הכיתה סכנת טקסט . יש 2 h3 אלמנטים עם הכיתה סכנת טקסט .

שורה 13 מדפיסה רק את חותמת הזמן מהרכיב שבחרתי באמצעות בורר ה- XPath ושמורתי ב- חותמת זמן מִשְׁתַנֶה.

שורה 14 סוגרת את הדפדפן.

לאחר שתסיים, הפעל את סקריפט Python ex01.py כדלהלן:

$ python3 ex01.py

כפי שאתה יכול לראות, חותמת הזמן הנוכחית מופקת מ- unixtimestamp.com ומודפסת בקונסולה.

עבודה עם המתנה מפורשת:

כדי להתנסות בהמתנה מפורשת, צור סקריפט פייתון חדש ex02.py בספריית הפרויקטים שלך והקלד את שורות הקודים הבאות בקובץ זה.

מסֵלֶנִיוּםיְבוּאמנהל התקן אינטרנט
מסֵלֶנִיוּם.מנהל התקן אינטרנט.מְשׁוּתָף.מפתחות יְבוּאמפתחות
מסֵלֶנִיוּם.מנהל התקן אינטרנט.מְשׁוּתָף.על ידי יְבוּאעל ידי
מסֵלֶנִיוּם.מנהל התקן אינטרנט.תמיכה.בצל יְבוּאWebDriverWait
מסֵלֶנִיוּם.מנהל התקן אינטרנט.תמיכה יְבוּאתנאים צפויים
אפשרויות=מנהל התקן אינטרנט.ChromeOptions()
אפשרויות.חֲסַר רֹאשׁ = נָכוֹן
דפדפן=מנהל התקן אינטרנט.כרום(_path הפעלה='./drivers/chromedriver',אפשרויות=אפשרויות)
דפדפן.לקבל('https://www.unixtimestamp.com/')
לְנַסוֹת:
חותמת זמן=WebDriverWait(דפדפן, 10).עד(
תנאים צפויים.present_of_element_located((על ידי.XPATH, '
// h3 [@] [1] '
))
)
הדפס('חותמת זמן נוכחית: %s'%(חותמת זמן.טֶקסט.לְפַצֵל('')[0]))
סוף כל סוף:
דפדפן.סגור()

לאחר שתסיים, שמור את ex02.py סקריפט פייתון.

שורה 1-5 מייבאת את כל הרכיבים הנדרשים מספריית סלניום.

שורה 7 יוצרת אובייקט אפשרויות Chrome.

שורה 8 מאפשרת נהג אינטרנט של Chrome ללא מצב ראש.

שורה 10 יוצרת אובייקט דפדפן Chrome באמצעות נהג כרום בינארי מה נהגים/ מַדרִיך.

שורה 12 טוענת את www.unixtimestamp.com בדפדפן.

ההמתנה המפורשת מיושמת בחסימת סוף סוף (משורה 14-20)

קו 15-17 משתמש יוצר WebDriverWait () לְהִתְנַגֵד. הטענה הראשונה של WebDriverWait () הוא אובייקט הדפדפן, והטיעון השני הוא הזמן המרבי המותר (התרחיש הגרוע ביותר) למילוי התנאי, שהוא 10 שניות במקרה זה.

בתוך ה עד() לַחסוֹם, צפוי_תנאים.התייצבות_מכל_ממוקם () שיטה משמשת לוודא שהאלמנט קיים לפני שתנסה לבחור את האלמנט. פה, מאת.XPATH משמש לספר את aanwez_of_element_located () שיטה בה השתמשנו בבורר XPath לבחירת האלמנט. בורר XPath הוא // h3 [@class = 'טקסט-סכנה'] [1] .

לאחר שנמצא האלמנט, הוא מאוחסן ב- חותמת זמן מִשְׁתַנֶה.

שורה 18 מדפיסה רק את חותמת הזמן מהרכיב שנבחר.

לבסוף, שורה 19-20 סוגרת את הדפדפן.

לאחר שתסיים, הפעל את ex02.py סקריפט פייתון כדלקמן:

$ python3 ex02.py

כפי שאתה יכול לראות, חותמת הזמן הנוכחית של unixtimestamp.com מודפסת בקונסולה.

בחירת רכיבים בהמתנה מפורשת:

בחלק הקודם השתמשתי מאת.XPATH לבחירת האלמנט באמצעות בורר XPath. תוכל גם לבחור את האלמנטים באמצעות מזהה, שם תג, שם מחלקה CSS, בורר CSS וכו '.

להלן שיטות הבחירה הנתמכות:

מאת.XPATH - בוחר רכיב/אלמנטים באמצעות בורר XPath.

מאת.CLASS_NAME - בוחר רכיב/אלמנטים באמצעות שם מחלקה CSS.

מאת.CSS_SELECTOR - בוחר רכיב/אלמנטים באמצעות בורר CSS.

מאת.ID - בוחר אלמנט לפי מזהה

לפי שם - בוחר רכיב/אלמנטים לפי שם.

מאת.TAG_NAME - בוחר רכיב/אלמנטים לפי שם תג HTML.

מאת. LINK_TEXT - בוחר אלמנט/אלמנטים לפי טקסט קישור של ל (עוגן) תג HTML.

מאת.PARTIAL_LINK_TEXT - בוחר אלמנט/אלמנטים לפי טקסט קישור חלקי של ל (עוגן) תג HTML.

למידע נוסף אודות אלה, בקר ב דף תיעוד Python Selenium API .

תנאים צפויים בהמתנה מפורשת:

בדוגמת ההמתנה המפורשת הקודמת השתמשתי ב- aanwez_of_element_located () שיטה של תנאים צפויים כתנאי ההמתנה המפורש כדי לוודא שהאלמנט שחיפשתי קיים לפני בחירתו.

יש אחרים תנאים צפויים תוכל להשתמש כתנאי המתנה מפורשים. כמה מהם הם:

title_is (כותרת) - בודק אם כותרת הדף היא כותרת .

title_contains (חלקי_כותרת) - בודק אם כותרת הדף מכילה חלק מהכותרת כותרת חלקית .

visibility_of (רכיב) - בודק אם אֵלֵמֶנט גלוי בדף שהוא האלמנט בעל רוחב וגובה גדול מ- 0.

visibility_of_element_located (איתור) -

aanwez_of_element_located (איתור) - ודא שהאלמנט הממוקם (על ידי איתור ) מופיע בדף. ה איתור הוא כפול של (מאת, בורר), כפי שהראיתי בדוגמת ההמתנה המפורשת.

aanwez_of_all_element_located () - מוודא שכל האלמנט התואם על ידי איתור נמצא בדף. ה איתור הוא (מאת, בורר) צמד.

text_to_be_present_in_element (איתור, טקסט) - בודק אם טֶקסט קיים ברכיב הממוקם על ידי איתור . ה איתור הוא (מאת, בורר) צמד.

element_to_be_clickable (איתור) - בודק אם האלמנט הממוקם ליד איתור גלוי וניתן ללחיצה. ה איתור הוא (מאת, בורר) צמד.

אלמנט_לבחור (איתור) - בודק אם האלמנט הממוקם ליד איתור נבחר. ה איתור הוא (מאת, בורר) צמד.

alert_is_present () - לצפות לדו -שיח התראה בדף.

יש הרבה יותר תנאים צפויים זמין לשימושך. למידע נוסף אודות אלה, בקר ב דף תיעוד Python Selenium API .

סיכום:

במאמר זה דנתי בהמתנה המשתמעת והמפורשת של סלניום. הראיתי לך גם כיצד לעבוד עם המתנה מרומזת ומפורשת. עליך תמיד לנסות להשתמש בהמתנה מפורשת בפרויקטים שלך בסלניום מכיוון שסלניום ינסה לצמצם ככל האפשר את זמן ההמתנה. בדרך זו, לא תצטרך לחכות למספר שניות ספציפי בכל פעם שאתה מפעיל את פרויקטי הסלניום שלך. ההמתנה המפורשת אמורה לחסוך הרבה שניות.

למידע נוסף על המתנה של סלניום, בקר הספרייה הרשמית של סלניום פייתון ממתינה לדף התיעוד .