מצב 'דפדפן Chrome ללא GUI' מאפשר להפעיל את הדפדפן בסביבה שאינה בשימוש, בלי ממשק משתמש גלוי. בעיקרון, אפשר להריץ את Chrome בלי Chrome.
מצב 'ללא GUI' הוא בחירה פופולרית לאוטומציה של דפדפנים, באמצעות פרויקטים כמו Puppeteer או ChromeDriver.
שימוש במצב 'דפדפן ללא GUI'
כדי להשתמש במצב 'דפדפן ללא ממשק גרפי', מעבירים את דגל שורת הפקודה --headless
:
chrome --headless
שימוש במצב 'דפדפן ללא GUI'
בעבר, מצב 'דפדפן ללא GUI' היה
הטמעה נפרדת של דפדפן חלופי
שנשלח כחלק מאותו בינארי של Chrome. לא שותף
כל אחד מהקודים של דפדפן Chrome
//chrome
ב-Chrome יש עכשיו מצבי 'דפדפן' ו'דפדפן ללא GUI' מאוחדים.
נכון לעכשיו, מצב 'ללא GUI' הקודם זמין עם:
chrome --headless=old
בבובת'
כדי להשתמש במצב 'דפדפן ללא GUI' ב-Puppeteer:
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({
headless: 'true', // (default) enables Headless
// `headless: 'old'` enables old Headless
// `headless: false` enables "headful" mode
});
const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');
// …
await browser.close();
ב-Selenium-WebDriver
כדי להשתמש במצב 'דפדפן ללא GUI' ב-Selenium-WebDriver:
const driver = await env
.builder()
.setChromeOptions(options.addArguments('--headless'))
.build();
await driver.get('https://developer.chrome.com/');
// …
await driver.quit();
למידע נוסף, כולל דוגמאות לקישורי שפות אחרים, ניתן לעיין בפוסט בבלוג של צוות סלניום.
התרעות לגבי שורת הפקודה
סימוני שורת הפקודה הבאים זמינים במצב 'דפדפן ללא ממשק גרפי'.
--dump-dom
הדגל --dump-dom
מדפיס את ה-DOM הסידורי של דף היעד ל-stdout.
לדוגמה:
chrome --headless --dump-dom https://developer.chrome.com/
הדבר שונה מהדפסת קוד המקור של ה-HTML, שניתן לעשות עם
curl
כדי לספק לך את הפלט של --dump-dom
, תחילה Chrome מנתח את ה-HTML
ב-DOM, מבצע כל <script>
שעשוי לשנות את ה-DOM, ואז
הפונקציה ממירה את ה-DOM הזה בחזרה למחרוזת HTML טורית.
--screenshot
הדגל --screenshot
מצלם צילום מסך של דף היעד ושומר אותו בשם
screenshot.png
בספריית העבודה הנוכחית. זה שימושי במיוחד
בשילוב עם הדגל --window-size
.
לדוגמה:
chrome --headless --screenshot --window-size=412,892 https://developer.chrome.com/
--print-to-pdf
הדגל --print-to-pdf
שומר את דף היעד כקובץ PDF בשם output.pdf
ב-
ספריית העבודה הנוכחית. לדוגמה:
chrome --headless --print-to-pdf https://developer.chrome.com/
אפשר גם להוסיף את הדגל --no-pdf-header-footer
כדי להשמיט את ההדפסה.
הכותרת העליונה (עם התאריך והשעה הנוכחיים) והכותרת התחתונה (עם כתובת ה-URL והדף)
מספר).
chrome --headless --print-to-pdf --no-pdf-header-footer https://developer.chrome.com/
לא: הפונקציונליות שמאחורי הדגל --no-pdf-header-footer
הייתה בעבר
זמינות בדגל --print-to-pdf-no-header
. יכול להיות שתצטרכו לחזור אל
את שם הדגל הישן, אם משתמשים בגרסה קודמת.
--timeout
הדגל --timeout
מגדיר את זמן ההמתנה המקסימלי (באלפיות השנייה) שאחריו
תוכן הדף צולם על ידי --dump-dom
, --screenshot
, וגם
--print-to-pdf
גם אם הדף עדיין בטעינה.
chrome --headless --print-to-pdf --timeout=5000 https://developer.chrome.com/
הדגל --timeout=5000
מורה ל-Chrome להמתין עד 5 שניות לפני הדפסה
את קובץ ה-PDF. לכן, התהליך הזה נמשך עד 5 שניות.
--virtual-time-budget
השדה --virtual-time-budget
משמש כפעולת 'הרצה קדימה' עבור כל קוד תלוי-זמן
(לדוגמה, setTimeout
/setInterval
). היא מאלצת את הדפדפן לבצע
של קוד הדף במהירות האפשרית, ובמקביל לגרום לדף להאמין
הזמן עובר בפועל.
כדי להמחיש את השימוש בה, נבחן את ההדגמה הזו.
הגדלה, רישום ביומן והצגת מונה כל שנייה
באמצעות setTimeout(fn, 1000)
. הנה הקוד הרלוונטי:
<output>0</output>
<script>
const element = document.querySelector('output');
let counter = 0;
setInterval(() => {
counter++;
console.log(counter);
element.textContent = counter;
}, 1_000);
</script>
אחרי שנייה אחת, הדף מכיל את הערך '1'. אחרי שתי שניות, '2' וכן הלאה. כך מתעדים את מצב הדף לאחר 42 שניות ושומרים אותו כקובץ PDF:
chrome --headless --print-to-pdf --virtual-time-budget=42000 https://mathiasbynens.be/demo/time
--allow-chrome-scheme-url
הדגל --allow-chrome-scheme-url
נדרש כדי לגשת לכתובות URL מסוג chrome://
.
הסימון הזה זמין ב-Chrome בגרסה 123. לדוגמה:
chrome --headless --print-to-pdf --allow-chrome-scheme-url chrome://gpu
ניפוי באגים
Chrome בלתי נראה באופן יעיל במצב 'דפדפן ללא GUI', לכן הוא עשוי להישמע מסובך כדי לפתור בעיה. ניתן לנפות באגים ב-Chrome ללא ממשק גרפי באופן שקשה מאוד דומה ל-Chrome הראשי.
הפעלת Chrome במצב 'דפדפן ללא GUI' באמצעות
דגל שורת הפקודה --remote-debugging-port
.
chrome --headless --remote-debugging-port=0 https://developer.chrome.com/
הפעולה הזו מדפיסה כתובת URL ייחודית של WebSocket ל-stdout, לדוגמה:
DevTools listening on ws://127.0.0.1:60926/devtools/browser/b4bd6eaa-b7c8-4319-8212-225097472fd9
במופע של דפדפן Chrome, אנחנו יכולים להשתמש לאחר מכן ניפוי באגים מרחוק בכלי הפיתוח ל-Chrome לצורך התחברות ליעד ללא GUI ולבדוק אותו.
- עוברים אל
chrome://inspect
ולוחצים על הלחצן Configure.... - מזינים את כתובת ה-IP ואת מספר היציאה מכתובת ה-URL של WebSocket.
- בדוגמה הקודמת הזנתי
127.0.0.1:60926
.
- בדוגמה הקודמת הזנתי
- לוחצים על סיום. אמור להופיע יעד מרוחק עם כל הכרטיסיות יעדים אחרים שצוינו.
- לוחצים על inspect כדי לגשת לכלי הפיתוח ל-Chrome ולבדוק את השלט הרחוק. יעד ללא GUI, כולל צפייה בזמן אמת של הדף.
משוב
נשמח לקבל ממך משוב על מצב 'ללא GUI'. אם המיקום אם תיתקלו בבעיות, דווחו על באג.