Playwright סקירה: רינדור JavaScript ב‑Chromium, בלי שכבת הסריקה

עודכן לאחרונה ב-August 20, 2026
Playwright סקירה: רינדור JavaScript ב‑Chromium, בלי שכבת הסריקה
סיכום AI
Playwright הוא מסגרת האוטומציה לדפדפנים של Microsoft: ספריית TypeScript בהקוד פתוח תחת Apache-2.0, שמפעילה דפדפן אמיתי, שולטת בו דרך API אחד, ומחזירה את הדף אחרי ש‑JavaScript סיים לרוץ. הוא משווק ככלי לבדיקות מקצה לקצה, אבל המנוע שמתחת למכסה המנוע הוא בדיוק מה שרבים שולפים בשקט כשבקשת HTTP מחזירה מעטפת ריקה במקום הנתונים. במבנה שלו הוא מתחרה ב‑Puppeteer וב‑Selenium — דפדפנים אמיתיים שמסקרפטים, לא לקוחות HTTP שמנתחים. הרצתי את microsoft/playwright 1.56.0 דרך סט קבוע של בדיקות סריקה — קטלוג סטטי עם עימוד, מאמר, קטלוג שמרונדר ב‑JavaScript, API ב‑JSON, תקלה 500, גרף סריקה קטן, ושני אתרי תרגול ציבוריים — על Node v22.22.3, macOS arm64, ורק Chromium.

Playwright היא מסגרת האוטומציה לדפדפנים של Microsoft: ספריית TypeScript בקוד פתוח תחת Apache-2.0, שמריצה דפדפן אמיתי, שולטת בו דרך API אחד, ומחזירה את הדף רק אחרי ש‑JavaScript מסיים לרוץ. מציגים אותה ככלי לבדיקות מקצה לקצה, אבל המנוע שמתחת למכסה הוא בדיוק מה שהרבה אנשים שולפים בשקט כשבקשת HTTP מחזירה מעטפת ריקה במקום הנתונים. במבנה שלה היא מתחרה ב‑Puppeteer וב‑Selenium — דפדפנים אמיתיים שמבצעים scraping, לא לקוחות HTTP שמנתחים.

הרצתי את microsoft/playwright בגרסה 1.56.0 דרך סט קבוע של בדיקות סריקת רשת — קטלוג סטטי עם עימוד, מאמר, קטלוג שמרונדר ב‑JavaScript, API ב‑JSON, תקלה 500, גרף סריקה קטן, ושני אתרי תרגול ציבוריים — על Node v22.22.3, macOS arm64, ורק Chromium. צד הרינדור עבד חלק. צד הסריקה פשוט לא קיים, והפער הזה הוא הדבר הכי חשוב להבין על הכלי לפני שמתחייבים אליו.

מה בלט

שתי תוצאות נמצאות בראש הרשימה, וכל אחת מצביעה קצת לכיוון אחר.

הראשונה היא תוצאת הדפדפן הצפויה, בהתאם להמתנות שהגדרתי. אחרי page.goto(..., { waitUntil: 'domcontentloaded' }), בדיקת ה‑fixture הדינמי חיכתה ל‑#dynamic-products article.product-card, ובדיקה הציבורית Quotes to Scrape חיכתה ל‑.quote. ברגע שהסלקטורים הספציפיים האלה הופיעו, הריצות החזירו 8/8 פריטים מה‑fixture ו‑10 ציטוטים מהאתר הציבורי; תוצאת ה‑fixture הגיעה ל‑recall של 1.0 מול אמת הקרקע שלה, שמכילה שמונה פריטים. לא היה צורך בלולאת polling מותאמת אישית, אבל Playwright לא ביטל את בעיית המוכנות — הבדיקה פשוט סיפקה את תנאי הסיום. גם צילום מסך מלא נשמר כבר בניסיון הראשון.

התוצאה השנייה השתמשה ב‑browserContext.request: כלומר, ctx.request.get(...) אחרי ש‑Chromium כבר הופעל והקשר הדפדפן כבר היה קיים. היא פנתה ישירות לנקודת ה‑JSON של ה‑fixture והחזירה 8/8 מוצרים בלי ליצור או לרנדר עמוד. זה מדלג על עבודת DOM, אבל לא על העלות של תהליך הדפדפן במסגרת הזו. לקוח הבקשות שמחובר להקשר יכול לשתף cookies עם עמודי הדפדפן; לעומת זאת, playwright.request.newContext() עצמאי לא דורש הקשר דפדפן, אבל גם לא משתף סשן אוטומטית. הבדיקה כיסתה רק את המסלול הראשון.

Playwright גם לא מספק תור סריקה, כתיבת dataset או throttling אוטומטי. בדיקת גרף הסריקה שלי — מעבר על קישורים פנימיים, מעקב אחרי עומק, והימנעות מביקורים חוזרים — הגיעה ל‑12 עמודים בעומקים {0:1, 1:4, 2:7}, אבל המעבר breadth-first היה קוד שכתבתי בעצמי. Playwright פותח ובודק עמודים; ההתמדה של frontier, מדיניות URL, ניסיונות חוזרים ותזמון שייכים לשכבה אחרת.

מה Playwright באמת

הכלי — microsoft/playwright ב‑GitHub — כתוב ב‑TypeScript, ברישיון Apache-2.0, ומתוחזק על ידי Microsoft. הגרסה שנבדקה כאן הייתה 1.56.0 ב‑9 ביולי 2026. התוצאות מדווחות עבור ה‑build הזה, ולא כהצהרת תאימות לגרסאות מאוחרות יותר.

העמדה הרשמית מדויקת: מסגרת לבדיקות ואוטומציה של אתרים שמפעילה Chromium, Firefox ו‑WebKit דרך API אחד. המסלול המרכזי של Playwright הוא test runner עם fixtures, assertions ו‑trace viewer. שימוש בו כבסיס לסריקה אומר לעבוד לפי Library mode המתועד: chromium.launch(), אחר כך context, ואז page, מחוץ למסגרת הבדיקות. כל מה שבסקירה הזו השתמש בממשק הציבורי הזה. לא הרצתי בדיקת תאימות בין גרסאות, כך שזה לא אומר שכל התנהגות שנבדקה יציבה בכל מהדורה.

הטווח המתועד הוא כותרת הדגל בכל מקום אחר, אז אנסח אותו בזהירות. Playwright מפעיל שלושה מנועי דפדפן — Chromium, Firefox ו‑WebKit — דרך API אחד, ומספק גם לקוחות רשמיים ב‑Python, Java ו‑.NET מעל JavaScript. זה מתועד, וזה באמת אחד ההבדלים המשמעותיים ביותר שלו במבנה. מה שהריצה הזו בדקה בפועל צר יותר:

יכולתמצב בסקירה הזו
מנוע Chromiumנבדק — כל הבדיקות כאן רצו על Chromium
מנוע Firefoxמתועד, לא אומת כאן
מנוע WebKitמתועד, לא אומת כאן
API אחד על פני שלושת המנועיםמתועד, לא אומת כאן
לקוחות Python, Java ו-.NETמתועד, לא אומת כאן
Proxyingלא נבדק
סקייל של כמה הקשרים במקביללא נבדק
יירוט רשת לסריקה מבוססת APIלא נבדק

אם יעד נראה אחרת תחת WebKit של Safari, או אם הצוות שלכם כותב ב‑Python, זה בדיוק הטיעון של Playwright — רק אל תיקחו את התוצאות שלי כהוכחה לשוויון בין Firefox ל‑WebKit, כי לא בדקתי אותם.

איך זה עובד מתחת למכסה המנוע

המודל המחשבתי הוא מנוע דפדפן שמבצעים עליו scraping. chromium.launch() מפעיל תהליך דפדפן. context הוא סשן מבודד עם cookies, אחסון ו‑cache משלו; page הוא לשונית בתוך ההקשר הזה. אתם קוראים page.goto(url), מחכים לתנאי שמייצג מוכנות של האפליקציה, וקוראים את ה‑DOM שנוצר בעזרת עזרים כמו page.$$eval. זה קרוב יותר לדפדפן אמיתי מול משתמש מאשר לניתוח של תגובת HTTP, אבל זו עדיין לא שקילות מלאה: headless, viewport, locale, fonts, מצב פרופיל, נתיב TLS/network והגנות האתר יכולים לשנות את מה שמוצג. הסקירה הזו לא בדקה התנהגות נגד‑בוט או שקילות מול דפדפן פרודקשן.

page.screenshot() מצלם את העמוד המרונדר, מלא או חתוך, ובאצלי זה עבד כבר בניסיון הראשון. ו‑API הבקשות שהזכרתי — context.request.get — פועל עם ה‑cookies של אותו הקשר אבל מדלג על הרינדור, כך שאפשר לשלב בין "לטעון את העמוד ולקרוא את ה‑DOM" לבין "רק לפגוע בנקודת ה‑JSON" באותו סקריפט בלי לעבור לכלי אחר.

מה שלא נמצא מתחת למכסה המנוע הוא מנגנון סריקה. אין scheduler לבקשות, אין visited-set שנשמר, אין מדיניות נימוס, ואין pipeline לייצוא. אפשר לשרטט מעבר מוגבל בקלות, אבל סריקה אמינה דורשת גם נירמול כתובות, טיפול בהפניות, ניסיונות חוזרים, כללי scope, throttling והתאוששות. את השכבה הזו בונים לבד או משתמשים במסגרת שעוטפת את מנוע הדפדפן.

מציאות ההתקנה וההגדרה

ההתקנה היא בשני שלבים, והשני נושא את רוב המשקל התפעולי. npm install playwright מוריד את הספרייה; אחר כך npx playwright install מוריד את גרסאות הדפדפן (Chromium במקרה שלי). צריך לתכנן נפח דיסק, זמן הורדה, caching של הדפדפן ב‑CI וניקוי תהליכים — לא להתייחס לחבילת npm כאילו היא כל המערכת הרצה.

אם מתקינים את Playwright מתוך ציפייה לקבל Scraper ועוקבים אחר מדריך הבדיקות, תתחילו מקבצי test ומ‑expect(). קוד סריקה, לעומת זאת, משתמש ישירות ב‑library API. שני הדברים מתועדים, אבל ההבחנה הזו חשובה כשמחפשים דוגמאות ובוחרים פקודות פריסה.

בריצה הזו, הארגונומיה השימושית הייתה מאוד מוחשית: הקשרים בדפדפן בודדו מצב סשן, קריאות async השתלבו בצורה נקייה, צילום מסך דרש קריאה אחת, ו‑HTTP 500 נשאר ניתן לבדיקה דרך אובייקט ה‑response. הקושי העיקרי היה תפעולי ולא תחבירי: היה צריך להתקין את ה‑browser build ולנהל את מחזור החיים שלו בנפרד מהספרייה.

תוצאות מעשיות

Measured results chart: Three data paths exercised

כל המספרים המקומיים נבדקו מול שרת fixture ב‑127.0.0.1, כשה‑ground truth נכתב לפני הסריקה. ההרצה המדויקת נמצאת ב‑run_playwright_material_tests.mjs, וה‑artifacts הגולמיים שבמאגר כוללים את ה‑ground truth ואת הפלטים לכל בדיקה. אלה עדיין תצפיות של המחבר ממכונה אחת ומהרצה אחת; הקישורים חושפים את אפשרות השחזור, לא הופכים זאת לבנצ'מרק רחב.

בדיקהיעדתוצאה
קטלוג סטטי + עימודfixture מקומי12/12 מוצרים, recall 1.0
חילוץ מאמרfixture מקומיכותרת + 3/3 פסקאות, boilerplate הופרד
עמוד דינמי ב‑JS (רינדור טבעי)fixture מקומי8/8, recall 1.0, נשמר צילום מסך מלא
API דינמי ב‑JSON (page.request)fixture מקומי8/8, recall 1.0, ללא רינדור DOM
טיפול ב‑HTTP 500fixture מקומיסטטוס 500 ניתן לבדיקה, הניווט לא זרק שגיאה
גרף סריקה (BFS שנכתב ידנית)fixture מקומי12 עמודים, עומקים {0:1, 1:4, 2:7}
Books to Scrapeדמו ציבורי20 מוצרים
Quotes JS (מרונדר ב‑JS)דמו ציבורי10 ציטוטים, מרונדר נייטיבית

לולאת העימוד עקבה במפורש אחרי הקישור הבא; Playwright לא גילה עמודים בעצמו. הסלקטור של המאמר שמר על הניווט ועל טקסט הפוטר מחוץ לתוצאה של גוף המאמר. במסלול הכשל, הניווט החזיר אובייקט תגובה עם status 500 במקום לזרוק שגיאה, והשאיר לשולח הקריאה להחליט אם לרשום, לנסות שוב או להמשיך. שני יעדי התרגול הציבוריים החזירו את הספירות שמופיעות בטבלה.

יש גבול שכדאי לציין במפורש: הכול כאן רץ על Chromium, על מכונה אחת, פעם אחת. טבלת היכולות מפרידה בין הטווח המתועד לבין ההתנהגות שנבדקה בפועל. לא הרצתי מחדש את הסט על build אחר של Playwright, ולכן אי אפשר להסיק מסקנה בין גרסאות. גם זמני הריצה לכל בדיקה הושמטו בכוונה כמדדי ביצוע; מעבר יחיד עם סטופר על מחשב נייד אחד לא מספיק להשוואת מהירות.

מוכנות היא חלק מחוזה החילוץ

התוצאות הדינמיות התבססו על המתנות שייצגו את הנתונים שרציתי, ולא רק על ניווט בדפדפן. בקטלוג המקומי, ה‑harness ניווט עם waitUntil: 'domcontentloaded' ואז קרא ל‑waitForSelector('#dynamic-products article.product-card') עם timeout של 15 שניות. הריצה הציבורית של Quotes JS השתמשה באותו מצב ניווט וחיכתה ל‑.quote עם timeout של 20 שניות. החילוץ קרה רק אחרי שהסלקטורים האלה הופיעו.

ההבחנה הזו חשובה כשמתאימים את הסקריפט. domcontentloaded אומר שהמסמך הראשוני כבר נותח; הוא לא אומר שתשובת API מאוחרת כבר הגיעה, שהידרציה הסתיימה, שרשימה אינסופית הפסיקה לגדול, או ששורה וירטואלית נכנסה ל‑viewport. סלקטור שימושי כשמספיק שמופיע לפחות אלמנט אחד תואם. אם השלמות תלויה בתגובה ידועה, בספירת פריטים, במצב אפליקציה או בחלון רשת שקט, עדיף להמתין לתנאי הזה במקום זאת. התנאי צריך להיות קשור לחוזה הפלט: "יש לפחות כרטיס אחד" ו‑"כל העמודים הצפויים נטענו" הן טענות שונות.

System diagram: Readiness Is an Extraction Contract

גם טיפול ב‑timeout שייך לשולח הקריאה. הבדיקה השתמשה ב‑timeouts סופיים לסלקטורים, אבל לא בחנה מדיניות retry ולא הבחינה בין עמוד איטי לבין סלקטור שהשתנה לצמיתות. מעטפת ייצור צריכה לתעד איזו תנאי מוכנות נכשל, ללכוד מספיק מצב עמוד כדי לאבחן, ולהחליט אם ניסיון ניווט נוסף בטוח. Playwright נותן לכם אירועים ו‑DOM; הוא לא יכול להסיק מה המשמעות של "נתונים מלאים" עבור המשימה שלכם.

את הגבול הזה צריך לתעד ליד כל extractor, לא להשאיר אותו כ‑timeout מרומז.

למסלול ה‑API יש חוזה מקביל. ctx.request.get היה מתאים כי הקשר הדפדפן כבר קיים, ושיתוף session יכול להיות שימושי. אם עבודה מגלה שנקודת הנתונים שלה פועלת בלי שום סשן דפדפן, הקשר בקשות עצמאי הוא ארכיטקטורה אחרת עם lifecycle והתנהגות cookies שונים. הריצה הזו לא השוותה בין השניים. צריך להתייחס ל"לא רונדר DOM" כאל עובדה שנמדדה, ואז להחליט בנפרד אם תהליך דפדפן נחוץ לזרימת העבודה הרחבה.

שאלת הסריקה

תוצאת גרף הסריקה היא זו שקובעת איך לחשוב על Playwright. שנים־עשר עמודים, שלושה עומקים, נכון — וכל לוגיקת ההליכה הייתה שלי. Playwright סיפק את חצי ה"פתח את ה‑URL וקרא אותו"; אני סיפקתי את התור, ה‑visited-set ומעקב העומק.

בעבודות קטנות ומוגבלות זו לא בעיה. בסקייל של סריקה זה אומר שאתם או כותבים crawler מעל ספריית דפדפן, או מצרפים ל‑Playwright משהו שכבר עשה את זה. הדפוס המתועד הוא Crawlee, שעוטף את Playwright (וגם Puppeteer) עם תור בקשות אמיתי, אחסון dataset ו‑auto-throttling — אתם שומרים על הרינדור של Playwright ומקבלים את שכבת התזמור. אם אתם רוצים שהתור יהיה מובנה בתוך המסגרת עצמה ולא תוספת חיצונית, זה כל הרעיון של Scrapy, אם כי Scrapy הוא HTTP-first ואינו מרנדר JavaScript בעצמו. הנקודה היא לא ש‑Playwright נופל קצר; אלא ש"אוטומציית דפדפן" ו"סריקה" הן שתי עבודות, ו‑Playwright טוען רק לאחת מהן.

System diagram: The Crawl Layer Is Yours

ה‑BFS של שנים־עשר העמודים הופך את גבול האחריות למוחשי. הוא סיפק תור, visited set ומעקב עומק לגרף מבוקר. frontier ברמת ייצור עדיין צריך להגדיר נירמול כתובות, טיפול בהפניות, hosts מותרים, מפתחות כפולים, ניסיונות חוזרים, מקביליות, השהיה לכל host, שמירה ו‑restart semantics. ייצוא הוא החלטה נוספת: ה‑fixture כתב JSON ו‑CSV כי ה‑harness עשה זאת, לא כי Playwright מספק אבסטרקציית dataset.

גם תכנון הסשנים משפיע על המעטפת. דפדפן אחד יכול להכיל כמה contexts עם cookies ואחסון מבודדים, אבל הסקירה הזו לא מדדה סקייל של כמה הקשרים במקביל או בידוד כשלים. שימוש חוזר ב‑context עשוי לשמור התחברות ולהקטין זמן הכנה; יצירת הקשרים נפרדים עשויה למנוע זליגת מצב בין עבודות. אלה מדיניות ברמת crawler גם אם Playwright מספק את primitive ההקשר. כדאי לבצע benchmark למחזור החיים שתבחרו, עם גרסת הדפדפן וסביבת הפריסה שבאמת תריצו.

יתרונות וחסרונות

יתרונות:

  • הרצת JavaScript דרך מנוע Chromium אמיתי; שני היעדים הדינמיים הגיעו לסלקטורים ששימשו כתנאי מוכנות.
  • צילום מסך מלא נשמר כבר בניסיון הראשון.
  • סלקטורים חילצו את שדות הקטלוג הסטטי ואת שדות המאמר מתוך ה‑fixtures המבוקרים.
  • browserContext.request הגיע לנקודת ה‑JSON בלי לרנדר עמוד, בזמן שתהליך הדפדפן שכבר הופעל נשאר חלק מה‑harness.
  • עמיד מול תגובה בעייתית: HTTP 500 היה ניתן לבדיקה והניווט לא זרק שגיאה.
  • תמיכה מתועדת בשלושת המנועים (Chromium, Firefox, WebKit) דרך API אחד, וגם לקוחות Python, Java ו‑.NET (מתועד; רק Chromium נבדק כאן).
  • Apache-2.0 ומתוחזק על ידי Microsoft.
  • חוויית מפתחים נקייה ברגע שנמצאים ב‑library mode: API אחד על פני המנועים, async מובנה, וצילומי מסך פשוטים מאוד.

חסרונות:

  • אין תור סריקה, dataset או auto-throttle מובנים — עבודת crawl בקנה מידה נשענת על הקוד שלכם או על wrapper כמו Crawlee.
  • משקל הדפדפן: הורדת הבינארי והעלות לכל עמוד הן המחיר האמיתי מול כלי שמתבסס רק על HTTP.
  • ברירת המחדל היא test runner; סריקה מחייבת לדעת ש‑library mode קיים ולרדת מהמסלול המשווק.
  • רק Playwright 1.56.0 ו‑Chromium נבדקו; תאימות בין גרסאות ובין מנועים לא נבדקה.
  • אין פלט JSON מובנה לפי סכימה משלו; אתם כותבים את הסלקטורים ומעצבים את הנתונים.

למי זה מתאים, ומי עדיף שיוותר

אם הבעיה שלכם היא רינדור של עמודים שהנתונים שלהם מופיעים רק אחרי ש‑JavaScript רץ, או איסוף צילומי מסך לצד נתוני DOM, Playwright הוא מועמד סביר לשחזור מול היעדים שלכם. צוותים שכבר משתמשים בבדיקות Playwright יכולים לעשות שימוש חוזר באותם מושגים ובאותן מיומנויות סלקטורים ב‑library mode. לקוחות Python, Java ו‑.NET הם אפשרויות מתועדות, אבל הסקירה הזו בדקה רק Node ו‑Chromium.

שקלו שכבה אחרת בשלושה מקרים. אם הנתונים הנדרשים כבר נמצאים בתגובת HTTP, כלי HTTP-first חוסך הפעלת דפדפן ורינדור; Colly הוא ספריית crawler בקטגוריה הזו, בעוד Trafilatura מכוונת לחילוץ מאמרים. אם אתם צריכים תור, התמדה ו‑throttling, השתמשו במסגרת סריקה או ב‑wrapper סביב Playwright. אם אתם צריכים פלט בצורה של סכימה בלי לתחזק סלקטורים, השוו בין שירותי חילוץ מנוהלים. אף אחת מהחלופות הללו לא נבחנה בבנצ'מרק בסקירה הזו.

אם אתם מתלבטים ספציפית בין Playwright ל‑Puppeteer, זו כבר התמודדות נפרדת; ההשוואה זו לצד זו שלנו מריצה את שניהם דרך אותם fixtures ומכסה איפה הבחירה באמת נוחתת.

חלופות, ואיפה משתלב חילוץ מנוהל

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

בתוך עולם הקוד הפתוח, ההשוואות השימושיות הן לפי משימה. עבור עבודה בקנה מידה של crawl מעל דפדפן, Crawlee מוסיף את התור וה‑dataset ש‑Playwright משאיר בחוץ. אם יעד הפלט שלכם הוא Markdown מוכן ל‑LLM מתוך דפדפן אמיתי במקום שורות מעוצבות ידנית, Crawl4AI מפעיל דפדפן ומפיק Markdown לזרימה הזו. ואם אתם שוקלים כמה מהכלים האלה יחד, הסקירה הכוללת שלנו על Scrapers בקוד פתוח מציגה את הקטגוריות זו לצד זו.

גילוי נאות: Thunderbit הוא המוצר של המוציא לאור ולא הופעל דרך ה‑fixture של Playwright. הוא מייצג את קטגוריית החילוץ המנוהל: השירות מפעיל את הרינדור ומחזיר טקסט עמוד או רשומות בצורה של סכימה, בעוד ש‑Playwright משאיר את תפעול הדפדפן ולוגיקת הסלקטורים בידי המפתח. לכן ההשוואה כאן היא מודל אירוח, צורת פלט ומודל עלות — לא תוצאת ביצועים מתוך הסקירה הזו.

נסו את Thunderbit לחילוץ נתוני רשת

פסק דין

בחרו ב‑Playwright כשיעד שלכם צריך מנוע דפדפן ואתם מוכנים לקחת אחריות על תנאי מוכנות, סלקטורים ותזמור הסריקה. טבלת התוצאות מראה ש‑library mode של Chromium עבד כמצופה מול ה‑fixtures הסטטיים, הדינמיים, ה‑API, צילום המסך והכשל שבדקתי בריצה הזו.

שמרו על גבול הראיות: רק Chromium ו‑Node נבדקו, ההליכה בת 12 העמודים הסתמכה על BFS שנכתב ידנית, browserContext.request דילג על רינדור עמוד אבל לא על תהליך הדפדפן שכבר פעל, וכל חילוץ דינמי השתמש בסלקטור מוכנות שהוגדר מראש. המגבלות האלה הופכות את Playwright לפרימיטיב של דפדפן בסקירה הזו, לא למערכת סריקה מקצה לקצה שנמדדה בפועל.

נסו את Thunderbit לחילוץ נתוני רשת Get Started Free

שאלות נפוצות

האם עדיין צריך המתנות כשסורקים עם Playwright? כן. עצם הרצת הדפדפן לא אומרת לסקריפט מתי נתוני האפליקציה מוכנים. בבדיקות האלה ניווטנו ל‑domcontentloaded ואז חיכינו לסלקטור ייעודי לפני החילוץ. עמודי ייצור עשויים לדרוש אות אחר, כמו response, מצב locator או אירוע אפליקציה.

האם Playwright יכול לסרוק אתר שלם בעצמו? לא out of the box. אין תור בקשות מובנה, כותב dataset או auto-throttle — בדיקת גרף הסריקה שלי הגיעה ל‑12 עמודים בעומקים {0:1, 1:4, 2:7} רק כי כתבתי את ה‑breadth-first search בעצמי. לעבודה בקנה מידה של crawl, חברו את Playwright ל‑Crawlee, שעוטף אותו עם שכבת סריקה אמיתית, או השתמשו במסגרת crawler אחרת.

מתי להשתמש ב‑browserContext.request לעומת request context עצמאי? השתמשו ב‑browserContext.request כשקריאות HTTP אמורות לשתף cookies עם עמודים בהקשר דפדפן קיים. השתמשו ב‑playwright.request.newContext() כשאתם רוצים הקשר API בלבד בלי להפעיל דפדפן, ולא צריכים שיתוף cookies אוטומטי עם עמודי דפדפן. רק המסלול הראשון נבדק כאן.

האם Firefox ו‑WebKit נבדקו כאן? לא. כל הבדיקות רצו על Chromium, על מכונה אחת, בריצה חד־פעמית. התמיכה של Playwright בשלושה מנועים (Chromium, Firefox, WebKit) וגם לקוחות Python, Java ו‑.NET הן יכולות מתועדות שאני מדווח עליהן כפי שהוגדרו, לא כפי שאומתו — התאמה בין Firefox ל‑WebKit, proxying, סקייל מקבילי ו‑network interception כולם מחוץ למה שהמספרים האלה מכסים.

איזו סביבת עבודה כוסתה בסקירה הזו? Playwright 1.56.0, Node v22.22.3, macOS arm64, ו‑Chromium בלבד. Firefox, WebKit, proxying, סקייל מקבילי, התנהגות נגד‑בוט וגרסאות מאוחרות יותר של Playwright היו מחוץ להרצה. ההתקנה דרשה גם את הספרייה וגם הורדה נפרדת של browser build.

Ke
Ke
CTO ב-Thunderbit | מדען נתונים בכיר ומומחה ב-ML עם כמעט עשור של ניסיון בלמידת מכונה ובמדע הנתונים, קה שן הוא בוגר אוניברסיטת קולומביה ולשעבר מדען נתונים בכיר ב-Walmart Labs. עם מומחיות עמוקה ומוכרת בקרב עמיתים ב-Python, R, Java וסטטיסטיקה, הוא משתף תובנות מוכחות-בקרב על המעבר מאלגוריתמי AI מורכבים מתיאוריה לארכיטקטורה ברמת production.
תוכן עניינים
Thunderbit · סוכן נתוני אינטרנט מבוסס AI

חלץ נתונים מכל דף בתוך קליק אחד

למעלה מ-250,000 משתמשים סומכים עליו
יש תוכנית חינמית
מדף אינטרנט לגיליון נתונים
תארו מה אתם צריכים — סוכן ה-AI של Thunderbit מחלץ את זה ומייצא ל-Excel, Google Sheets, Airtable או Notion. חינמי להתחלה.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week